幽默小白羊 2021-01-09 21:02 采纳率: 50%
浏览 19
已结题

python明明没有' ',为什么显示' '不能转化为数字?

本人在做分数计算程序时出了点问题,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())

有大神看得出来吗?另外,我的命名和方法可能比较麻烦,有更好建议就最好了。谢谢了!!!

  • 写回答

1条回答 默认 最新

  • Haisen大王 2021-01-09 21:28
    关注

    我用 Pycharm 工具运行了一下你的源代码,在 DEBUG 发现,如图错误。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)