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))
我尝试这样做,但是当我输入两位数时,它会崩溃我该怎么办?
答案 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
请注意,您的程序仍然会出现除零错误,额外空格问题以及用户输入的任何非整数的问题。我把这些留给你了。