【问题标题】:How to convert an improper fraction to a mixed number, using python如何使用python将假分数转换为带分数
【发布时间】:2016-09-19 02:26:19
【问题描述】:

我必须编写一个将假分数转换为带分数的程序。提示用户输入分子和分母,然后计算并显示等效的混合数。分子是23,分母是6。

这就是我目前所拥有的......

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

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

【问题讨论】:

    标签: python-3.x numbers mixed


    【解决方案1】:

    好问题。这是使用分数函数的一种解决方案。分数很好,因为它减少了分数。您使用底除法 (//) 去除整数,然后将剩余的分数提供给 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)
    

    【讨论】:

    • 这应该可以。您需要一个函数还是只是为了演示这样做?你想禁止写 0 等吗?
    【解决方案2】:

    正如其他答案指出的那样,您可以使用整数除法和模运算符来获得所需的数字。

    编写这个问题的另一个方面是创建一个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 '')
    

    【讨论】:

      【解决方案3】:

      假设您的输入始终是整数值,您可以使用除法和取模运算符来执行此操作。

      以下应该有效:

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

      【讨论】:

      • 有没有办法让这个减少分数?我看到 6、4 例如将导致 1 和 2/4
      • @EoinS 您可以找到最大公分母,然后将两个数字除以该值。这是一些额外的代码,但应该不会太难添加。我喜欢您的解决方案,因为它可以处理此问题,但这取决于他们是否要使用单独的模块。
      • 好点我在移动设备上,必须尝试 5 个在线解释器,然后才能找到一个可以接受分数模块的解释器 :(
      • 我就是这样写的,但它仍然返回错误。你能看出我哪里搞砸了吗? def main(): num = int(input('输入分子')) den = int(input('输入分母:')) a = num // dem b = num % dem print('混合后的数字是{} 和 {}/{}', format(a,b, dem)) main ()
      猜你喜欢
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 2023-02-10
      • 2017-02-17
      相关资源
      最近更新 更多