繁体   English   中英

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

[英]How to fix 'TypeError: not all arguments converted during string formatting' in Python

我正在尝试编写代码以从主密钥中获取两个密钥。 键必须是字符串。 对于第一个,您必须取偶数,对于第二个,您必须取奇数。 例如:主密钥 = 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*

我想知道为什么会发生这种情况以及解决方案。 谢谢!

digit是一个字符串。 只需使用int()对其进行类型转换:

if not int(digit) % 2:

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

这个 for 循环将起作用:

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

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

要修复它,请将其转换为整数:

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

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)

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

masterKey = '18293'
firstKey  = "".join([e for e in masterKey if int(e) % 2 == 0])
secondKey = "".join([e for e in masterKey if int(e) % 2 != 0])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM