我试图这样做,如果分数的分母超过2,它会打印小数。否则,它会打印分数
from fractions import Fraction
z = float(input())
frac = (Fraction(z))
s = str(z)
x = s.find("/")
x1 = x + 1
segment = z[x1:]
print(segment)
if len(segment) <= 3:
print(frac)
else:
print(z)
答案 0 :(得分:1)
你正在变得比它需要的更难。使用Fraction
实例的denominator
attribute:
frac = Fraction(z)
if frac.denominator > 2:
print(z)
else:
print(frac)
您可能希望使用Fraction.limit_denominator()
method来说明浮动的不精确性:
frac = Fraction(z).limit_denominator()
if frac.denominator > 2:
print(z)
else:
print(frac)
Fraction.limit_denominator()
找到与分母限制在100万以下的原始分数最接近的分数:
>>> from fractions import Fraction
>>> 2/3
0.6666666666666666
>>> Fraction(2/3)
Fraction(6004799503160661, 9007199254740992)
>>> Fraction(2/3).limit_denominator()
Fraction(2, 3)
另一种方法是将用户输入直接传递给Fraction()
;构造函数以 numerator / denominator (带可选符号)的形式接受float()
和字符串的有效值。这会让您的用户输入精确的分数,例如&#39; 2/3&#39; :
z = Fraction(input()).limit_denominator()
if frac.denominator > 2:
print(float(z))
else:
print(frac)