如何使用 python 将假分数转换为带分数
How to convert an improper fraction to a mixed number, using python
我必须编写一个程序,将假分数转换为带分数。提示用户输入分子和分母,然后计算并显示等值的带分数。分子为23,分母为6.
这是我目前所拥有的...
num = int(input('Type numerator'))
dem = int(input('Type denominator'))
我不确定下一步是什么...我知道答案应该是混合数是 3 和 5/6。
假设您的输入始终是整数值,您可以使用除法和 mod 运算符来执行此操作。
以下应该有效:
a = num // dem
b = num % dem
print 'The mixed number is {} and {}/{}'.format(a, b, dem)
好问题。这是使用 Fraction 函数的一种解决方案。分数很好,因为它减少了分数。您使用 floor divide (//
) 去除整数,然后将剩余的分数提供给 Fraction:
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 和...”的响应。
在不使用分数模块的情况下,我们必须找到最大公约数(从分数中借用 gcd 函数)减少我们的初始分数,然后使用@Jenner Felton 的绝妙解决方案
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)
正如其他答案所指出的,您可以使用整数除法和取模运算符来获得您想要的数字。
编写此问题的另一个方面可以使事情变得更容易,即创建一个 while
循环以及一个 try
、except
块来输入假分数,以便您不要得到例外。
看起来像这样:
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 '')
我必须编写一个程序,将假分数转换为带分数。提示用户输入分子和分母,然后计算并显示等值的带分数。分子为23,分母为6.
这是我目前所拥有的...
num = int(input('Type numerator'))
dem = int(input('Type denominator'))
我不确定下一步是什么...我知道答案应该是混合数是 3 和 5/6。
假设您的输入始终是整数值,您可以使用除法和 mod 运算符来执行此操作。
以下应该有效:
a = num // dem
b = num % dem
print 'The mixed number is {} and {}/{}'.format(a, b, dem)
好问题。这是使用 Fraction 函数的一种解决方案。分数很好,因为它减少了分数。您使用 floor divide (//
) 去除整数,然后将剩余的分数提供给 Fraction:
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 和...”的响应。
在不使用分数模块的情况下,我们必须找到最大公约数(从分数中借用 gcd 函数)减少我们的初始分数,然后使用@Jenner Felton 的绝妙解决方案
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)
正如其他答案所指出的,您可以使用整数除法和取模运算符来获得您想要的数字。
编写此问题的另一个方面可以使事情变得更容易,即创建一个 while
循环以及一个 try
、except
块来输入假分数,以便您不要得到例外。
看起来像这样:
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 '')