0

У меня есть программа, которая, как предполагается, чтобы вычислить код Хемминг для четности с 7-разрядным целым числом, вот программа:TypeError: не все аргументы преобразуются во строке форматирования

data=list(input("Enter a 7-bit binary integer:")) 

if (data[0]+data[1]+data[3]+data[4]+data[6])%2 == 0: 
    data.insert(8, "0") 
else: 
    data.insert(8, "1") 

if (data[0]+data[2]+data[3]+data[5]+data[6])%2 == 0: 
    data.insert(7, "0") 
else: 
    data.insert(7, "1") 

if (data[1]+data[2]+data[3])%2 == 0: 
    data.insert(6, "0") 
else: 
    data.insert(6, "1") 

if (data[4]+data[5]+data[6])%2 == 0: 
    data.insert(3, "0") 
else: 
    data.insert(3, "1") 

print("Your 7-bit binary integer with Hamming Code parity bits:",data) 

Однако, когда я бегом этого program Я получаю эту ошибку:

Traceback (most recent call last): 
    File "C:\Python34\hamcode.py", line 3, in <module> 
    if (data[0]+data[1]+data[3]+data[4]+data[6])%2 == 0: 
TypeError: not all arguments converted during string formatting 

Я не уверен, что это значит и как это исправить, любые отзывы были бы весьма благодарны.

ответ

0

Тип data список со строками, а не список целых чисел:

>>> data=list(input("Enter a 7-bit binary integer:")) 
Enter a 7-bit binary integer:123456 
>>> data 
['1', '2', '3', '4', '5', '6'] 

Таким образом, вы пытаетесь конкатенации строк и вы не суммируя цифры, как и ожидалось:

if (data[0]+data[1]+data[3]+data[4]+data[6])%2 == 0: 

чтобы исправить это, вам нужно изменить все строки в число первых:

data = [int(x) for x in data] 

В настоящий момент эта строка добавляет строки в список обратно вместе к одной строке, и вы пытаетесь использовать форматирование строк в этой строке (с % 2, который синтаксис для форматирования строк). Оператор % является оператором modulo при применении к числу, но это оператор форматирования строк при применении к строке.

Другими словами, вы делаете:

'123456' % 2 

что означает Python пытается вставить, что 2 в строку 123456 в соответствующем месте (что не возможно, потому что нет места, предназначенные для Это).

+0

Я не уверен, как вставить данные = [int (x) для x в данные] в мой текущий код, я пробовал несколько способов, таких как: data = list (input («Введите 7-битный двоичный файл integer: ")) data = [int (x) для x в данных], но я продолжаю получать ошибки –

Смежные вопросы