【发布时间】:2014-09-26 23:52:11
【问题描述】:
def adder(l1,l2,op):
if(op == 0):
carry = 0
result = []
l1.reverse()
l2.reverse()
for x in range(0, 4):
sum = l1[x] + l2[x] + carry
if(sum == 0):
result[x] = 0
carry = 0
elif(sum == 1):
result[x] = 1
carry = 0
elif(sum == 2):
result[x] = 0
carry = 1
elif(sum == 3):
result[x] = 1
carry = 1
if(x == 2):
carry_in = carry
if(x == 3):
carry_out = carry
result.reverse()
overflow = carry_in ^ carry_out
sign = result[3]
zero = not(result[0] | result[1] | result[2] | result[3])
sign_of_true_result = overflow ^ sign
print result,carry,overflow,sign,zero,sign_of_true_result
number1 = []
number2 = []
print "Enter the bits of number 1 one by one: "
x = 0
while(x < 4):
digit_1 = raw_input()
if(digit_1 != '0' and digit_1 != '1'):
print "Please enter either 0 or 1"
continue
else:
x = x + 1
number1.append(int(digit_1))
print "Enter the bits of number 2 one by one: "
y = 0
while(y < 4):
digit_2 = raw_input()
if(digit_2 != '0' and digit_2 != '1'):
print "Please enter either 0 or 1"
continue
else:
y = y + 1
number2.append(int(digit_2))
op = int(raw_input("Press 0 for addition or 1 for substraction (Op): "))
if __name__ == '__main__':
adder(number1,number2,op)
我正在尝试实现 4 位二进制加法器。我收到以下错误。第 22 行有什么问题?我不明白为什么会出现超出范围的错误。
错误:
Traceback (most recent call last):
File "ex9.py", line 85, in <module>
adder(number1,number2,op)
File "ex9.py", line 22, in adder
result[x] = 0
IndexError: list assignment index out of range
【问题讨论】:
-
要了解为什么这是一个错误,您必须知道
x中的内容以及result中的内容。您可以使用调试器或交互式可视化工具找到它,或者只是在该行之前添加print(x, result),然后告诉我们您看到了什么。或者,更好的是,您可以将其简化为minimal, complete, verifiable example,以便某人可能一眼就能理解和调试,或者自己运行,以找到您的问题。 (这包括输入,而不仅仅是代码!或者,更好的是,将输入硬编码到您的示例中。) -
无论如何,我什至可以不读代码就大胆尝试一下:你已经实现了进位,你正在添加两个 4 位数字,你可能将结果存储在一个列表中4 位,如果您下溢或溢出,您最终会尝试将位设置为第五位,而该位不存在。
-
我正在运行 for 循环 4 次以添加所有四个位。不是设置第五位的点。无论如何,这个错误并不重要,我可以通过调试来弄清楚。我对第 85 行发生的第一个错误更感兴趣。在问这个问题之前,我做了充分的研究。 :)