我制作了一个代码,让用户以“#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
答案 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)
在显示数字之前,只需将numerator
和denominator
划分为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