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? Я не понимаю, почему существует ошибка вне диапазона.Ошибка трассировки (последний последний звонок) в python
Ошибка:
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)» прямо перед этой строкой, а затем рассказать нам, что вы видите. Или, что еще лучше, вы можете разделить это на [минимальный, полный, проверяемый пример] (http://stackoverflow.com/help/mcve), который кто-то может, возможно, понять и отладить с первого взгляда или, может быть, запустить для себя, чтобы найти вашу проблему. (Это включает в себя вход, а не только код! Или, еще лучше, жесткий код ввода в ваш пример.) – abarnert
В любом случае, я могу нанести такой же удар, даже не прочитав код: вы реализовали перенос, вы добавив два 4-разрядных номера, вы, вероятно, сохраните результат в списке из 4 бит, а если вы переполняете или переполняете, вы пытаетесь установить бит пятый бит, которого не существует. – abarnert
Я запускаю цикл for 4 раза, чтобы добавить все четыре бита. Не указывать пятый бит.В любом случае эта ошибка не важна, я могу понять, отлаживая ее. Меня больше интересует первая ошибка, которая возникает в строке 85. Я сделал свое полное исследование, прежде чем задавать этот вопрос. :) – Aashil