如何将作为元组传递的分数相乘

时间:2015-10-17 01:02:27

标签: python

def mult(num):
    #num='(1,2)(3,4)'
    numn=int(num[1])
    denom=int(num[3])
    numn1=int(num[6])
    denom1=int(num[8])
    numnetor=numn*numn1
    denominetor=denom * denom1
    ans=str(numnetor)+'/'+ str(denominetor)
    return ans
askUser=input("Enter Fraction:")
print(mult(askUser))

我尝试这样做,但是当我输入两位数时,它会崩溃我该怎么办?

2 个答案:

答案 0 :(得分:1)

Python已经支持标准库中的分数。 如果您的分数是字符串形式:

from fractions import Fraction
f = Fraction(askUser)

如果您的分数是元组形式:

f = Fraction(*fraction_tuple)

生成的Fraction对象可以在标准算术中使用,就像它们是数字一样。

答案 1 :(得分:0)

我怀疑你实际上需要处理复合元组的字符串,你正在寻找的解决方案是raw_input(而不是input)和ast(这是什么input确实如此。

现在,当单独理解两个元组时,程序现在可以处理超过两位数的数字。

import ast

def mult(num):
    sep_indx = num.find(')(')
    assert sep_indx > -1

    tuple1, tuple2 = num[:sep_indx+1], num[sep_indx+1:]
    tuple1 = ast.literal_eval(tuple1)
    tuple2 = ast.literal_eval(tuple2)

    numn=int(tuple1[0])
    denom=int(tuple1[1])
    numn1=int(tuple2[0])
    denom1=int(tuple2[1])
    numnetor=numn*numn1
    denominetor=denom * denom1
    ans=str(numnetor)+'/'+ str(denominetor)
    return ans

askUser=raw_input("Enter Fraction:")
print(mult(askUser))

#Enter Fraction:(1,20)(3,40)
#3/800

请注意,您的程序仍然会出现除零错误,额外空格问题以及用户输入的任何非整数的问题。我把这些留给你了。

相关问题