while True:
try:
num = int(input('Type numerator'))
break
except:
continue
将其拆分为一个单独的函数,这样会更好一些:
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 '')
3条答案
按热度按时间v8wbuo2f1#
假设您的输入永远是整数值,您可以使用除法和mod运算子来执行此作业。
以下方法应该有效:
bvjveswy2#
问得好。这里有一个使用Fraction函数的解决方案。Fraction很好,因为它可以减少分数。您可以使用floor divide(
//
)去掉整数,然后将剩下的分数输入Fraction:[Python 3.5](https://docs.python.org/2/library/fractions.html#fractions.Fraction)对分数的扩展阅读。因为你给它的是num和dem,而不是一个纯粹的小数,所以它是非常安全的。
这也摆脱了“0和...”的React,这是困扰我。
在不使用分数模块的情况下,我们必须找到最大公因子(借用分数的gcd函数),减少我们的初始分数,然后使用来自@詹纳Felton的绝妙解决方案
u59ebvdq3#
正如其他答案所指出的,可以使用整数除法和模运算符来得到所需的数字。
编写这个问题的代码的另一个方面是创建一个
while
循环沿着一个try
,except
块,用于输入不正确的分数,这样就不会出现异常。它看起来像这样:
将其拆分为一个单独的函数,这样会更好一些:
下面是我获得混合数的一行代码: