本人在做分数计算程序时出了点问题,int(' 23 ')可以被转化为23,但int(' ')不能被转换。仔细观察了代码,并没有哪里把' '转换成整型,可报错显示注释为“a1.b1,a3.b3”的那一行有把空格转化为整型的现象,不可行。我已经把两个分数的关系和新对象标出来了,.代表+、-、*、/。
import re
class fraction():
def __init__(self,na,di):
self.sna=na
self.sdi=di
def reduce(self):
a=dpf(self.sna)
b=dpf(self.sdi)
c=1
for i in range(len(a)):
if a[i] in b:
c*=int(a[i])
self.sna=int(self.sna/c)
self.sdi=int(self.sdi/c)
return
def unreduce(self,a):
self.sna*=a
self.sdi*=a
return
def howtowrite(self):
nal=len(str(self.sna))
if self.sdi!=1:
dil=len(str(self.sdi))
if nal>dil:a=nal
else:a=dil
if a==dil:na=' '*int(a/2/nal)+str(self.sna)+' '*int(a-a/2/nal)
else:na=self.sna
sl='-'*a
if a==nal:di=' '*int(a/2/dil)+str(self.sdi)+' '*int(a-a/2/nal)
else:di=self.sdi
else:
na,di=' '*nal,' '*nal
sl=self.sna
return [str(na),str(sl),str(di)]
def dpf(x):
a=[]
b=x
while b!=1:
for i in range(int(b)-1):
if isint(b/(i+2)):
a.append(i+2)
b/=i+2
break
return a
def isint(a):
x=list(str(a));x.append('a')
if ((x[x.index('.')+1])=='0')and((x[x.index('.')+2])=='a'):
return True
return False
def write(objlist1,str,objlist2):
if isnone(objlist1[0])and(not(isnone(objlist2[0]))):#a false and b true
a=fraction(eval(str(int(objlist1[1]))+str+str(int(objlist2[0]))),int(objlist2[2]))#a2.b1,b3
elif isnone(objlist1[0])and(isnone(objlist2[0])):#a false and b false
a=fraction(eval(str(int(objlist1[1]))+str+str(int(objlist2[1]))),1)#a2.b2,none
elif not(isnone(objlist1[0]))and(isnone(objlist2[0])):#a true and b false
a=fraction(eval(str(int(objlist1[0]))+str+str(int(objlist2[1]))),int(objlist1[2]))#a1=b2,a3
else:#a true and b true
a=fraction(eval(str(int(objlist1[0]))+str+str(int(objlist2[0]))),eval(str(int(objlist1[2]))+str+str(int(
objlist2[2]))))#a1.b1,a3.b3
print(objlist1[0]+' '+objlist2[0]+' '+a.howtowrite()[0])
print(objlist1[1]+' '+str+' '+objlist2[1]+' = '+a.howtowrite()[1])
print(objlist1[2]+' '+objlist2[2]+' '+a.howtowrite()[2])
def isnone(obj):
a=r'^(\s*)$'
b=re.match(a,obj)
if a!=None:
return False
else:
return True
if __name__=='__main__':
a=fraction(23,1)
a.reduce()
b=fraction(45,1234)
b.reduce()
write(a.howtowrite(),'*',b.howtowrite())
有大神看得出来吗?另外,我的命名和方法可能比较麻烦,有更好建议就最好了。谢谢了!!!