如何使用python将不正确的分数转换为混合数

wnrlj8wa  于 2022-11-26  发布在  Python
关注(0)|答案(3)|浏览(113)

我必须编写一个程序,将一个不正确的分数转换成一个混合数。提示用户输入分子和分母,然后计算并显示等价的混合数。分子是23,分母是6。
这是我目前所拥有的...

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

我不太确定下一步是什么......我知道答案应该是混合数是3和5/6。

v8wbuo2f

v8wbuo2f1#

假设您的输入永远是整数值,您可以使用除法和mod运算子来执行此作业。
以下方法应该有效:

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

bvjveswy2#

问得好。这里有一个使用Fraction函数的解决方案。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 3.5](https://docs.python.org/2/library/fractions.html#fractions.Fraction)对分数的扩展阅读。因为你给它的是num和dem,而不是一个纯粹的小数,所以它是非常安全的。
这也摆脱了“0和...”的React,这是困扰我。
在不使用分数模块的情况下,我们必须找到最大公因子(借用分数的gcd函数),减少我们的初始分数,然后使用来自@詹纳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)
u59ebvdq

u59ebvdq3#

正如其他答案所指出的,可以使用整数除法和模运算符来得到所需的数字。
编写这个问题的代码的另一个方面是创建一个while循环沿着一个tryexcept块,用于输入不正确的分数,这样就不会出现异常。
它看起来像这样:

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 '')

相关问题