Python验证IMEI合法性报错:TypeError: 字符串格式化参数未全转换
IMEI合法性验证脚本错误修复方案
错误原因
你遇到的TypeError: not all arguments converted during string formatting,核心问题有两个:
input()获取的用户输入是字符串类型,代码里直接对字符串执行n % 10——Python中字符串的%是格式化运算符(比如"Hello %s" % "World"),不是数值取模操作,因此触发错误。- 代码中用
n = n / 10,Python3里/返回浮点数,后续循环的取模、除法操作会持续出错。
修复步骤
- 将输入转为整数:把用户输入的字符串转换成数值类型,才能进行取模、除法等数值运算。
- 改用整数除法:用
//替代/,确保除法结果始终是整数,避免浮点数带来的后续问题。 - 避免使用内置函数名当变量:
sum是Python内置函数,改成total作为累加变量名,避免命名冲突。
修正后的完整代码
def sumDig(n): a = 0 while n > 0: a = a + n % 10 n = n // 10 return a def isValidEMEI(n): s = str(n) l = len(s) if l != 15: return False d = 0 total = 0 # 替换sum,避免和内置函数冲突 for i in range(15, 0, -1): d = n % 10 if i % 2 == 0: d = 2 * d total = total + sumDig(d) n = n // 10 # 整数除法,替代/ return (total % 10 == 0) # 输入转成整数 n = int(input("Enter number: ")) if isValidEMEI(n): print("Valid IMEI Code") else: print("Invalid IMEI Code")
额外提示(可选)
如果要处理用户输入非数字的情况,可以加异常捕获:
try: n = int(input("Enter number: ")) except ValueError: print("Please enter a valid numeric IMEI") exit()
内容的提问来源于stack exchange,提问作者Addy
相关产品推荐
相关产品推荐

