TypeError:并非在字符串格式化期间转换所有参数

时间:2014-11-23 18:09:12

标签: python arguments string-formatting typeerror hamming-code

我有一个程序应该计算汉明码以获得偶数奇偶校验的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 个答案:

答案 0 :(得分: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是字符串格式的语法)。运算符%在应用于数字时是模运算符,但在应用于字符串时它是字符串格式化运算符。

换句话说,你正在做:

'123456' % 2

这意味着Python正在尝试将2插入到适当位置的字符串123456中(这是不可能的,因为没有指定位置)。