如何在Python中修复'TypeError:在字符串格式化期间并非所有参数都已转换'

时间:2019-04-28 22:07:10

标签: python string list

我正在尝试编写代码以从主密钥中获取两个密钥。密钥必须是字符串。对于第一个,您必须采用偶数,而对于第二个,则应采用赔率。例如:主密钥=18923。第一个密钥= 82,第二个密钥= 193。

我是python的新手。

masterKey = '18293'
firstKey = ''
secondKey = ''

masterKeyList = list(masterKey)
firstKeyList = list(firstKey)
secondKeyList = list(secondKey)

for digit in masterKeyList:
    **if digit % 2 == 0:** *<--- here is the error*
        firstKeyList.append(digit)
    else:
        secondKeyList.append(digit)


 *if digit % 2 == 0: <--- Error message
    TypeError: not all arguments converted during string formatting*

我想知道为什么会这样,以及解决方法。谢谢!

4 个答案:

答案 0 :(得分:1)

发生此错误是因为digit是字符串,而%在字符串上下文中是格式运算符。

要修复此问题,请将其转换为整数:

...
if int(digit) % 2 == 0:
...

答案 1 :(得分:1)

digit是代码中的字符串,因此,如果要应用模2,则需要将其转换为数字。应该可以正常工作:

masterKey = '18293'
firstKey = ''
secondKey = ''

masterKeyList = list(masterKey)
firstKeyList = list(firstKey)
secondKeyList = list(secondKey)

for digit in masterKeyList:
    if int(digit) % 2 == 0: <--- fixed
        firstKeyList.append(digit)
    else:
        secondKeyList.append(digit)

答案 2 :(得分:1)

digit是一个字符串。只需使用int()进行打字:

if not int(digit) % 2:

发生错误的原因是因为模数运算符也是字符串格式运算符,但是您没有为字符串格式'2'提供必要的参数

此for循环将起作用:

for digit in masterKeyList:
    if not int(digit) % 2:
        firstKeyList.append(digit)
    else:
        secondKeyList.append(digit)

答案 3 :(得分:1)

如果需要使用unordered_set,可以使用列表理解和join()来简化和缩短。如果您更喜欢strings,则只需删除lists。您可以执行以下操作:

join()