zoukankan      html  css  js  c++  java
  • 《数据结构与算法Python语言描述》习题第二章第三题(python版)

    ADT Rational: #定义有理数的抽象数据类型
    Rational(self, int num, int den) #构造有理数num/den
    +(self, Rational r2) #求出本对象加r2的结果
    -(self, Rational r2) #求出本对象减r2的结果
    *(self, Rational r2) #求出本对象乘以r2的结果
    /(self, Rational r2) #求出本对象除以r2的结果
    num(self) #取出本对象的分子
    den(self) #取出本对象的分母
    int(self) #取整
    float(self) #取浮点数
    ==(self,Rational r2)
    !=(self,Rational r2)
    >(self,Rational r2)
    <(self,Rational r2)
    >=(self,Rational r2)
    >=(self,Rational r2)

      1 #!/usr/bib/env python
      2 # -*- coding:utf-8 -*-
      3 
      4 """
      5 ADT Rational:                           #定义有理数的抽象数据类型
      6     Rational(self, int num, int den)    #构造有理数num/den
      7     +(self, Rational r2)                #求出本对象加r2的结果
      8     -(self, Rational r2)                #求出本对象减r2的结果
      9     *(self, Rational r2)                #求出本对象乘以r2的结果
     10     /(self, Rational r2)                #求出本对象除以r2的结果
     11     num(self)                           #取出本对象的分子
     12     den(self)                           #取出本对象的分母
     13     int(self)                           #取整
     14     float(self)                         #取浮点数
     15     ==(self,Rational r2)
     16     !=(self,Rational r2)
     17     >(self,Rational r2)
     18     <(self,Rational r2)
     19     >=(self,Rational r2)
     20     >=(self,Rational r2)
     21 """
     22 
     23 class Rational(object):
     24     __slots__ = ('_num', '_den')
     25 
     26     @staticmethod
     27     def _gcd(m,n):
     28         while 1:
     29             temp = n % m
     30             if temp == 0:
     31                 return m
     32             else:
     33                 n = m
     34                 m = temp
     35 
     36     def __init__(self, num, den=1):
     37         if not isinstance(num, int) or not isinstance(num, int):
     38             raise   TypeError
     39         if den == 0:
     40             raise ZeroDivisionError
     41         sign = 1
     42         if num < 0:
     43             num, sign = -num, -sign
     44         if den < 0:
     45             den, sign = -den, -sign
     46         g = Rational._gcd(num, den)
     47         self._num = sign*(num//g)
     48         self._den = den//g
     49 
     50         #float
     51         x = self._num / self._den
     52         self._num = x.as_integer_ratio()[0]
     53         self._den = x.as_integer_ratio()[1]
     54 
     55     def __add__(self, other):
     56         den = self._den * other._den
     57         num = self._den * other._num + self._num * other._den
     58         return Rational(num, den)
     59 
     60     def __sub__(self, other):
     61         den = self._den * other._den
     62         num = self._num * other._den - self._den * other._num
     63         return Rational(num, den)
     64 
     65     def __mul__(self, other):
     66         den = self._den * other._den
     67         num = self._num * other._num
     68         return Rational(num, den)
     69 
     70     def __floordiv__(self, other):
     71         den = self._den * other._num
     72         num = self._num * other._den
     73         return Rational(num, den)
     74 
     75     def __int__(self):
     76         return self._num // self._den
     77 
     78     def __float__(self):
     79         return self._num / self._den
     80 
     81     def __eq__(self, other):
     82         return self._num * other._den == self._den * other._num
     83 
     84     def __ne__(self, other):
     85         return self._num * other._den != self._den * other._num
     86 
     87     def __lt__(self, other):
     88         return self._num * other._den < self._den * other._num
     89 
     90     def __le__(self, other):
     91         return self._num * other._den <= self._den * other._num
     92 
     93     def __gt__(self, other):
     94         return self._num * other._den > self._den * other._num
     95 
     96     def __ge__(self, other):
     97         return self._num * other._den >= self._den * other._num
     98 
     99 
    100     def __str__(self):
    101         return str(self._num) + "/" + str(self._den)
    102 
    103     def print(self):
    104         print(self._num, "/", self._den)
    105 
    106     def num(self):
    107         return self._num
    108     def den(self):
    109         return self._den
    110 
    111 if __name__ == '__main__':
    112     a = Rational(10,5)
    113     b = Rational(1,1000000)
    114     print(a)
    115     print(b)
    116     print("==")
    117     print(a+b)
    118     print(a!=b)
    119     print(int(a))
    120     print(int(b))
    
    
    
     
  • 相关阅读:
    DOORS的引用类型
    C# 中多态和重载的区别
    VS中C#连接SQLite数据库处理器架构“x86”不匹配的问题
    C# 4种方法计算斐波那契数列 Fibonacci
    (C#版本)提升SQlite数据库效率——开启事务,极速插入数据,3秒100万,32秒1000万条数据
    数据结构简单学习
    intellij idea载入java工程报程序包提示不存在,springboot已经导入了依赖依然提示不存在
    springboot整合mybatis提示错误Error:java: 程序包org.apache.ibatis.annotations不存在、找不到符号:类 Mapper
    springboot Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project springboot-mybatis: There are test failures.
    C# Stream 和 byte[] 之间的转换
  • 原文地址:https://www.cnblogs.com/xautxuqiang/p/6090719.html
Copyright © 2011-2022 走看看