我一直在说“非类型对象是不可编辑的”,我不知道为什么。我已经检查了我的程序一千次了。有人知道怎么解决这个问题吗?

2024-04-20 12:11:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我被分配了一项任务,要为一台笔记本电脑写一个程序。第一个程序只是检查输入的数字是否有效,并导入另外两个模块,即逻辑门和全加器。逻辑门没有错误,我确信它是由门(if,else)组成的。这是我的密码:

    dec1=int(input("Enter first decimal number: "))
    dec2=int(input("Enter second decimal number: "))

    def check(dec1,dec2):

        if (dec1+dec2)>255:
            print ("The decimal number you've entered is invalid. Please enter another number")
            dec1=int(input("Enter first number again: "))
            dec2=int(input("Enter second number again: "))
            return dec1,dec2

        elif (dec1+dec2)>+127 and (dec1+dec2)<-127:
            print ("The decimal number you've entered is invalid. Please enter your numbers again")
            dec1=int(input("Enter first number again: "))
            dec2=int(input("Enter second number again: "))
            return dec1,dec2

        else:
            print("Your number is now converted")
            return dec1,dec2

            print (check(dec1,dec2))

            import conversion
            lis1, lis2=conversion.bin2dec(dec1,dec2)

            import fullAdder
            add= fullAdder.fulladder(lis1,lis2)

            print (add)

这是我的加法器:

    import logicGates

    def fulladder(bin1,bin2):
        lis1=list(bin1)
        lis2=list(bin2)
        Cin=0
        lisEmp=[]

        for i in range(7,-1,-1):
            num1=int(lis1[i])
            num2=int(lis2[i])
            result1=logicGates.XOR(num1,num2)
            result2=logicGates.NAND(result1,Cin)
            result3=logicGates.OR(result1,Cin)
            Sum=logicGates.AND(result2,result3)
            result4=logicGates.AND(num1,num2)
            result5=logicGates.AND(result1,Cin)
            result6=logicGates.NOR(result4,result5)
            result7=logicGates.NOT(result6)

            Cin=result7
            lisEmp.insert(0,Sum)

        return lisEmp

这是我的bin2dec代码:

    def bin2dec(dec1,dec2):

        a=bin(dec1)
        b=bin(dec2)

        c=a[2:]
        d=b[2:]

        bin1=c.zfill(8)
        bin2=d.zfill(8)

        print (bin1)
        print (bin2)

这就是我一直犯的错误。你知道吗

    Traceback (most recent call last):
      File "C:\Python34\main.py", line 26, in <module>
        lis1, lis2=conversion.bin2dec(dec1,dec2)
    TypeError: 'NoneType' object is not iterable

Tags: numberinputreturnisintdecimalprintenter
3条回答

我认为这样的代码更好:

def input2num():
    while 1:
        dec1 = int(input("Enter first decimal number: "))
        dec2 = int(input("Enter second decimal number: "))
        if not -127 <= dec1+dec2 <= 127:
            print ("The decimal numbers you've entered is invalid."
                   " Please enter another two numbers.\n")
        else:
            print("Your number is now converted")                

            import conversion
            lst1, lst2 = conversion.bin2dec(dec1, dec2)

            import fullAdder
            add = fullAdder.fulladder(lst1, lst2)
            print(add)
            return dec1, dec2

dec1, dec2 = input2num()            

全加器:

import logicGates

def fulladder(bin1, bin2):
    cin, lstEmp = 0, []
    for a, b in zip(bin1[::-1], bin2[::-1]): 
        num1, num2 = int(a), int(b)
        result1 = logicGates.XOR(num1, num2)
        result2 = logicGates.NAND(result1, cin)
        result3 = logicGates.OR(result1, cin)
        _sum = logicGates.AND(result2, result3)
        result4 = logicGates.AND(num1, num2)
        result5 = logicGates.AND(result1, cin)
        result6 = logicGates.NOR(result4, result5)
        result7 = logicGates.NOT(result6)
        cin = result7
        lstEmp.append(_sum)
    return lstEmp[::-1]

bin2dec公司:

def bin2dec(dec1, dec2):
    form = lambda x: bin(x)[2:].zfill(8)
    print(form(dec1), form(dec2))
    return form(dec1), form(dec2)

bin2dec函数不返回值。它打印出值。你知道吗

试着把它改成return bin1, bin2

TLDR

问题是函数bin2dec没有return语句。你可以通过添加

return bin1, bin2

bin2dec的结尾。你知道吗

错误的深入解释

实际上发生了什么,以及为什么会得到“NoneType object is not iterable”,是因为python实际上有一个函数的多个返回值,即使它看起来像这样。相反,返回一个元组,然后解包这个元组。你知道吗

所以,代码中发生的事情与此等价

result = conversion.bin2dec(dec1, dec2)
lis1, lis2 = result

在这里,由于缺少return语句,我们得到resultNone,然后在执行lis1, lis2 = result的下一行中,您尝试解压一个None值,这是不可能的,因此抛出一个TypeError。你知道吗

相关问题 更多 >