选择您的数字是分数还是小数

Choose if your number is a fraction or a decimal

我正在尝试做到这一点,如果分数的分母大于 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)

你让它变得比需要的更难。使用 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();构造函数接受 float() 字符串的有效值,格式为 numerator / denominator(带可选符号)。这将使您的用户输入精确的分数,例如 '2 / 3':

z = Fraction(input()).limit_denominator()
if frac.denominator > 2:
    print(float(z))
else:
    print(frac)