Ошибка типа: не все аргументы, преобразованные во время форматирования строки

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

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)

Однако, когда я запускаю эту программу, я получаю эту ошибку:

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

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

1 ответ

Тип 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 какой синтаксис для форматирования строки). Оператор % это оператор по модулю применительно к числу, но это оператор форматирования строки применительно к строке.

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

'123456' % 2

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

Другие вопросы по тегам