[英]How to fix TypeError: not all arguments converted during string formatting
[英]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.