Выберите, является ли ваш номер дробной или десятичной - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь сделать так, чтобы, если знаменатель дроби был больше 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)

1 Ответ

0 голосов
/ 20 мая 2018

Вы делаете это намного сложнее, чем нужно.Используйте атрибут denominator экземпляра Fraction:

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

Возможно, вы захотите использовать метод Fraction.limit_denominator() для учета неточного характераиз чисел с плавающей запятой:

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

Fraction.limit_denominator() находит ближайшую дробь к оригиналу, где знаменатель ограничен, ниже 1 миллиона:

>>> from fractions import Fraction
>>> 2/3
0.6666666666666666
>>> Fraction(2/3)
Fraction(6004799503160661, 9007199254740992)
>>> Fraction(2/3).limit_denominator()
Fraction(2, 3)

Другая альтернатива - передать пользовательский ввод прямодо Fraction();конструктор принимает оба допустимых значения для строк float() и в форме числитель / знаменатель (с необязательным знаком).Это позволит вашим пользователям вводить точные дроби, такие как '2/3' :

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