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

Python 3.x 如何使用python将不正确的分数转换为混合数,python-3.x,numbers,mixed,Python 3.x,Numbers,Mixed,我必须编写一个程序,将不适当的分数转换成混合数。提示用户输入分子和分母,然后计算并显示等效的混合数。分子是23,分母是6 这就是我目前所拥有的 num = int(input('Type numerator')) dem = int(input('Type denominator')) 我不确定下一步是什么…我知道答案应该是3和5/6的混合数。假设输入总是整数值,可以使用除法和mod运算符来完成此操作 以下方面应起作用: a = num // dem b = num % dem print '

我必须编写一个程序,将不适当的分数转换成混合数。提示用户输入分子和分母,然后计算并显示等效的混合数。分子是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)

好问题。这里有一个使用分数函数的解决方案。分数是好的,因为它减少了分数。您可以使用floor divide//去掉整数,然后将剩余分数输入到分数:

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]分数的扩展读取。因为你给它输入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,除了阻止输入不正确的分数,这样您就不会得到异常

它看起来是这样的:

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

这应该行得通。您需要一个函数还是仅仅为了演示如何执行此操作?是否要禁止写入0等?是否有方法使其减少分数?例如,我看到6,4将导致1和2/4@EoinS您可以找到最大公分母,然后将两个数字除以该值。这是一个额外的代码,但不应该太难添加。我喜欢你的解决方案,因为它可以处理这个问题,但这取决于他们是否想使用单独的模块。好的一点,我使用手机,在找到一个可以接受分数模块的在线口译员之前,我尝试了5个在线口译员:这就是我编写它的方式,它仍然会出现错误。你能看到我把事情搞砸了吗?def main:num=intinput'输入分子'den=intinput'输入分母:'a=num//dem b=num%dem print'混合的分子为{}和{}/{},格式为a、b、dem main