我已经被赋予了为一个星号编写程序的任务。第一个程序只检查输入的数字是否有效,并导入另外两个模块,即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
答案 0 :(得分:2)
问题是你的函数bin2dec
没有return语句。您可以通过添加
return bin1, bin2
到bin2dec
的结尾。
实际发生了什么,以及为什么你得到&#34; NoneType对象不可迭代&#34;,就是python确实不有一个函数的多个返回值,即使它看起来喜欢它。相反,会发生的是返回一个元组,然后解压缩该元组。
因此,您的代码中发生的事情等同于此
result = conversion.bin2dec(dec1, dec2)
lis1, lis2 = result
在这里,由于你缺少一个return语句,我们得到result
为None
,然后在执行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)