【问题标题】:TypeError: not all arguments converted during string formattingTypeError:字符串格式化期间并非所有参数都转换了
【发布时间】:2015-01-21 10:24:02
【问题描述】:

我有一个程序应该用 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

我不确定这意味着什么以及如何解决它,任何回复将不胜感激。

【问题讨论】:

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


    【解决方案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 的适当位置(这是不可能的,因为没有为其指定位置)。

    【讨论】:

    • 我不确定如何将 data = [int(x) for x in data] 插入到我当前的代码中,我尝试了多种方法,例如: data=list(input("Enter一个 7 位二进制整数:")) data = [int(x) for x in data],但我不断收到错误
    猜你喜欢
    • 2021-08-19
    • 2015-03-30
    • 1970-01-01
    • 2022-01-10
    • 2020-08-23
    • 2015-10-28
    • 2013-10-21
    相关资源
    最近更新 更多