编写阿姆斯特朗数判断代码时遇TypeError报错求助
阿姆斯特朗数判断代码错误排查与修复
错误原因
第6行的TypeError是因为你直接对字符串做了取模运算(num%10)。input()函数返回的是字符串类型,而Python中字符串的%是字符串格式化操作符,不是数学上的取模。你把输入的字符串赋值给num后,执行num%10时,Python会尝试把10当成格式化参数,但字符串里没有对应的占位符,所以报错。
修复步骤
- 将输入转为整数:阿姆斯特朗数是针对整数的,所以首先要把
input()得到的字符串转成整数类型。 - 使用整数除法:Python3中
/会返回浮点数,后续取模会出错,应该用//做整数除法,保证num始终是整数。 - 统一数据类型比较:最后判断
sum和原数是否相等时,两者都要是整数类型,避免类型不匹配的问题。
修正后的代码
n = int(input("enter the number: ")) num = n digit, sum = 0, 0 length = len(str(n)) # 转成字符串获取位数 for i in range(length): digit = num % 10 num = num // 10 # 整数除法,确保num是整数 sum += pow(digit, length) if sum == n: print("armstrong") else: print("Not armstrong")
额外优化(可选)
如果不想转字符串获取位数,可以用数学方法计算位数,避免类型转换:
n = int(input("enter the number: ")) num = n digit, sum = 0, 0 # 计算位数 temp = n length = 0 while temp != 0: temp = temp // 10 length += 1 for i in range(length): digit = num % 10 num = num // 10 sum += pow(digit, length) if sum == n: print("armstrong") else: print("Not armstrong")
内容的提问来源于stack exchange,提问作者Yash Vardhan
相关产品推荐
相关产品推荐

