2016-05-22 2 views
2

Мне нужно написать программу, которая преобразует неправильную фракцию в смешанное число. Запросить пользователя для числителя и знаменателя, затем рассчитать и отобразить эквивалентное смешанное число. числитель и знаменатель 23 равен 6.Как преобразовать неправильную фракцию в смешанное число, используя python

Это то, что я до сих пор ...

num = int(input('Type numerator')) 
dem = int(input('Type denominator')) 

Я не совсем уверен, что следующий шаг ... Я знаю, что ответ должен be Смешанное число - 3 и 5/6.

ответ

3

Предполагая, что ваши входы всегда являются целыми значениями, вы можете использовать операторы divide и mod для этого.

должно работать:

a = num // dem 
b = num % dem 
print 'The mixed number is {} and {}/{}'.format(a, b, dem) 
+0

Есть ли способ получить это, чтобы уменьшить долю? Я вижу 6, 4, например, приведет к 1 и 2/4 – EoinS

+1

@EoinS. Вы можете найти наибольший общий знаменатель, а затем разделите оба числа на это значение. Это немного лишний код, но его нельзя добавлять слишком сложно. Мне нравится ваше решение, поскольку оно справляется с этим, но зависит от того, хотят ли они использовать отдельные модули. –

+0

Хорошая точка, я нахожусь на мобильном телефоне, и мне пришлось попробовать 5 онлайн-переводчиков, прежде чем найти тот, который примет модуль фракций :( – EoinS

1

Хороший вопрос. Вот одно решение, использующее функцию фракции. Фракция хорошая, потому что она уменьшает фракции. Вы можете использовать пол разрыва (//), чтобы вырезать целое число, а затем кормить оставшуюся фракцию Фракция:

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) 
+0

Это должно сработать. Вам нужна функция или просто продемонстрировать это? Вы хотите подавить письмо 0 и т. Д.? – EoinS

0

Как и другие ответы указывают , вы можете использовать целочисленное деление и операторы modulo для получения нужных чисел.

Другого аспект этой проблемы кодирования, что будет делать вещи проще создают while петли вместе с try, except блоком для ввода неправильной фракции, так что вы не получите исключение.

Это будет выглядеть следующим образом:

while True: 
    try: 
     num = int(input('Type numerator')) 
     break 
    except: 
     continue 

Split это в отдельную функцию, чтобы сделать вещи немного лучше:

def get_data(message, f = lambda data: data): 
    '''Prompts the user for data entry. 
     Function f is applied to data; any exception encountered 
     results in user being prompted again. 
     Entry is simply returned if no function is supplied.''' 
    message = str(message) 
    while True: 
     try: 
      num = f(input(message)) 
      break 
     except: 
      continue 
    return num 

num = get_data('Type numerator', int) 
den = get_data('Type denominator', int) 

Вот мой один вкладыш для получения смешанного числа:

'%s%s%s' % ('%s ' % (num//den) if num//den != 0 else '', '%s/' % (num%den) if num%den != 0 else '', '%s' % den if num%den != 0 else '') 
Смежные вопросы