-->

Python类分数号(python class fraction numbers)

2019-10-19 00:45发布

我提出,使用户输入的两个级分中的数字形式“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

Answer 1:

使用fractions.Fraction()类 ,并把它做的工作给你:

>>> 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


Answer 2:

    >>> 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 )



Answer 3:

简单地划分numeratordenominator ,以他们的最大公约数的数字显示,前。 也就是说,如果你想使用自己的类。 否则,有一个Fraction的类fractions模块。



Answer 4:

嗯,首先你将不得不支持添加到您Rational ,其计算减小的形式一小部分类。 基本上,你需要做的就是增加一个reduce()即会找出两个分子,分母在合理的最小公分母法。 尝试寻找最小公倍数的一种算法。



Answer 5:

import fractions

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


文章来源: python class fraction numbers