You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写阿姆斯特朗数判断代码时遇TypeError报错求助

阿姆斯特朗数判断代码错误排查与修复

错误原因

第6行的TypeError是因为你直接对字符串做了取模运算(num%10)。input()函数返回的是字符串类型,而Python中字符串的%是字符串格式化操作符,不是数学上的取模。你把输入的字符串赋值给num后,执行num%10时,Python会尝试把10当成格式化参数,但字符串里没有对应的占位符,所以报错。

修复步骤

  1. 将输入转为整数:阿姆斯特朗数是针对整数的,所以首先要把input()得到的字符串转成整数类型。
  2. 使用整数除法:Python3中/会返回浮点数,后续取模会出错,应该用//做整数除法,保证num始终是整数。
  3. 统一数据类型比较:最后判断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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:40:40