Хороший вопрос. Вот одно решение, использующее функцию фракции. Фракция хорошая, потому что она уменьшает фракции. Вы можете использовать пол разрыва (//
), чтобы вырезать целое число, а затем кормить оставшуюся фракцию Фракция:
From fractions import Fraction
num = int(input('Type numerator'))
dem = int(input('Type denominator'))
Print str(num // dem) + ' and ' + str(Fraction(num%dem,dem)) if num//dem != 0 else str(Fraction(num%dem,dem))
[Python 9.5] (https://docs.python.org/2/library/fractions.html#fractions.Fraction) Расширенное чтение на фракции. Поскольку вы кормите его num и dem, а не чистым десятичным, это довольно безопасно.
Это также избавляет от реакции «0 и ...», которая беспокоила меня.
Без использования модуля фракций, мы должны найти наибольший общий делитель (НОД заимствования функции из фракций) уменьшают нашу начальную часть, а затем использовать гениальное решение от @Jenner Фелтон
def gcdm(num,dem):
while dem:
num, dem = dem, num%dem
return num
gcd = gcdm(num,dem)
num, dem = num/gcd, dem/gcd
Print "%d and %d/%d" % ((num//dem), (num%dem),dem) if num//dem !=0 else "%d/%d" % (num%dem,dem)
Есть ли способ получить это, чтобы уменьшить долю? Я вижу 6, 4, например, приведет к 1 и 2/4 – EoinS
@EoinS. Вы можете найти наибольший общий знаменатель, а затем разделите оба числа на это значение. Это немного лишний код, но его нельзя добавлять слишком сложно. Мне нравится ваше решение, поскольку оно справляется с этим, но зависит от того, хотят ли они использовать отдельные модули. –
Хорошая точка, я нахожусь на мобильном телефоне, и мне пришлось попробовать 5 онлайн-переводчиков, прежде чем найти тот, который примет модуль фракций :( – EoinS