为何我的Python阿姆斯特朗数(Armstrong number)代码无法正常运行?
问题分析与解决方法
你的代码核心问题是原始输入的number被循环修改为0,导致最后判断阿姆斯特朗数的逻辑完全错误。
具体问题点
第一个循环中,你执行了number = number // 10,每次循环都会把number缩小10倍,循环结束后number已经变成0。此时判断if int(s) == int(number),本质是在判断幂次和s是否等于0,这显然和阿姆斯特朗数的判断逻辑(幂次和等于原始数字)不符。
修正后的代码
只需要在最开始保存原始输入的数值,用这个原始值完成最后的对比即可:
original_number = int(input('Enter a number')) number = original_number # 复制一份用来拆解数字,不改动原始值 n = len(str(original_number)) m = s = 0 list1 = [] for i in range(n): m = number % 10 print(m) list1.append(m) number = number // 10 print(list1) for o in list1: p = o ** n s = s + p print(s, 'is the sum of nth power of individual terms') if s == original_number: print('It is an armstrong number') else: print('It is not an armstrong number')
可选优化方案
如果想简化代码,可以直接遍历原始数字的字符串形式,省去取模和整除的步骤:
original_number = int(input('Enter a number')) digit_count = len(str(original_number)) power_sum = sum(int(digit)**digit_count for digit in str(original_number)) print('It is an armstrong number' if power_sum == original_number else 'It is not an armstrong number')
内容的提问来源于stack exchange,提问作者ConTresillo
相关产品推荐
相关产品推荐

