python类分数

时间:2013-11-22 15:42:05

标签: python class numbers fractions

我制作了一个代码,让用户以“#34; d / n"”的形式输入两个分数。

如何打印缩小形式的分数?

例如:当我输入2/4时,它打印1/2?

   import sys

class Rational:

  def __init__(self,n,d):
    self.numerator= n
    self.denominator= d
  def value(self):
    return float(self.numerator)/float(self.denominator)

  def __repr__(self):
    return "%d/%d ~ %g" % (self.numerator,self.denominator,self.value())
  def read(self):
    while 1:
      try:
        s=raw_input("Enter fraction n/d: ")
        n,d= s.split("/")
        self.numerator= int(n)
        self.denominator= int(d)
      except KeyboardInterrupt:
        print
        exit()
      except:
        print sys.exc_info()[0]
        print "bad input, try again."
      else:
        if int(d)==0:
          print "The denominator cannot be zero. Try again."
        elif int(d)<0:
          print "The denominator cannot be negative. Try again."
        else:
          return

r1=Rational(1,1)
r1.read()
print r1

r2=Rational(1,1)
r2.read()
print r2

5 个答案:

答案 0 :(得分:4)

使用fractions.Fraction() class并让它为您完成工作:

>>> import fractions
>>> fractions.Fraction(2, 4)
Fraction(1, 2)

要自己简化分数,请计算最大公约数:

def gcd(a, b):
    while b:
        a, b = b, a%b
    return a

g = gcd(numerator, denominator)
numerator //= g
denominator //= g

答案 1 :(得分:1)

    >>> num = 2
    >>> den = 4        
    >>> from fractions import Fraction
    >>> frac = Fraction(num,den).limit_denominator()
    >>> numer = frac.numerator
    >>> denom = frac.denominator
    >>> print '%d/%d ~ %g' % (numer, denom, float(numer)/denom)
    1/2 ~ 0.5

希望这会有所帮助。 (链接http://docs.python.org/2/library/fractions.html

答案 2 :(得分:0)

在显示数字之前,只需将numeratordenominator划分为greatest common divisor。那就是你想要使用自己的类。否则,Fraction模块中有fractions个类。

答案 3 :(得分:0)

好吧,首先,您必须为Rational类添加支持,以计算分数的简化形式。基本上,您需要做的是添加一个reduce()方法,该方法找到Rational中两个分子,分母的最小公分母。尝试查看Least Common Multiple算法。

答案 4 :(得分:0)

import fractions

f = fractions.Fraction(5, 10)
print (f) # print 1/2