Python阿姆斯特朗数代码问题:判断条件始终执行else分支
阿姆斯特朗数判断代码的错误分析与修复
错误原因
你的代码核心问题是在循环中修改了原始输入的num变量:
在while num>0循环里,每次执行num=num//10,循环结束后num的值会变成0。最后判断summ == num时,实际是拿计算出的阿姆斯特朗和与0比较,自然永远进入else分支。
比如输入371,循环结束后num变为0,而summ是371,371≠0,所以输出"Not Armstrong"。
修复后的代码
只需要保存原始输入的数值,用新变量参与最终判断即可:
# Armstrong Number num = int(input("Enter a number: ")) original_num = num # 保存原始输入值 a = [] b = [] while num > 0: digit = num % 10 # 取最后一位数字 a.append(digit) # 存储各位数字到列表 num = num // 10 for i in a: numb = i ** len(a) # 计算各位数字的位数次方 b.append(numb) # 存储计算结果到列表 summ = sum(b) # 计算所有结果的和 print("Sum is:", summ) if summ == original_num: # 和原始输入值比较 print("Yes Armstrong No") else: print("Not Armstrong")
验证
输入371时,original_num保留了371,summ计算结果也是371,此时判断条件成立,会输出"Yes Armstrong No"。
内容的提问来源于stack exchange,提问作者Himesh Banerjee
相关产品推荐
相关产品推荐

