Ошибка типа: не все аргументы, преобразованные во время форматирования строки
У меня есть программа, которая должна вычислять код Хемминга для четного равенства с 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
в соответствующем месте (что невозможно, потому что для него нет места).