我一直在得到“NoneType对象不可迭代”我不知道为什么。我已经检查了我的程序一千次。有谁知道如何解决这一问题?

时间:2017-07-15 17:28:03

标签: python

我已经被赋予了为一个星号编写程序的任务。第一个程序只检查输入的数字是否有效,并导入另外两个模块,即logicGates和fullAdder。 logicGates没有错误,我很确定它,因为它由gate(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

4 个答案:

答案 0 :(得分:2)

TLDR

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

来修复它
return bin1, bin2

bin2dec的结尾。

深入解释错误

实际发生了什么,以及为什么你得到&#34; NoneType对象不可迭代&#34;,就是python确实有一个函数的多个返回值,即使它看起来喜欢它。相反,会发生的是返回一个元组,然后解压缩该元组。

因此,您的代码中发生的事情等同于此

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

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

答案 1 :(得分:0)

您的bin2dec函数不会返回值。它打印出值。

尝试将其更改为return bin1, bin2

答案 2 :(得分:0)

我认为像这样的代码更好:

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()            

fullAdder:

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)

答案 3 :(得分:0)

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)

您的函数中没有return语句。因此,在执行后调用它时,它返回一个None值。

您可以通过在打印后添加return(bin1,bin2)来修复它

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)
            return (bin1,bin2)