python - Armstrong 数字两次显示错误输出并在最后更正(Python)
问题描述
x = int(input("enter your number"))
f = x
sum_ = 0
while(f>0):
a =f % 10
f = int(f//10)
sum_ =sum_ + (a**3)
if (x == sum_):
print("it is armstrong")
elif (x!= sum_):
print(x,"is not an armstrong number")
当我运行此代码时,我得到以下输出:
enter your number153
153 is not an armstrong number
153 is not an armstrong number
it is armstrong
为什么它显示错误两次,最后一次正确输出?我怎样才能解决这个问题?
解决方案
正如之前的帖子所指出的,if-loop
应该将其放在while
循环之外以避免重复打印。
或者,您可以将其设为稍后使用的函数:
def is_armstrong(n: int) -> bool:
num = str(n)
powered = len(num)
return n == sum(int(x)** powered for x in num)
if __name__ == '__main__':
nums = [153, 371, 456]
for num in nums:
print(f' {num} is an armstrong? {is_armstrong(num)} ')
# or calling by asking user input:
# x = int(input('Type a number to check: '))
# print(is_armstrong(x))
# 153 True
# 371 True
# 456 False
推荐阅读
- javascript - 如何在jQuery中调整滚动速度
- spring - 从缓存 Spring Boot 中排除特定字段
- python - 从另一个数据帧计算日期之间的出现次数(给定 ID 值)
- android - Android 依赖 'androidx.localbroadcastmanager:localbroadcastmanager' 有不同的编译版本 (1.0.0-rc01) Flutter
- spring-boot - 无法将执行器启用到 Spring Cloud 网关格林威治
- r - Duplicating a row in a data-frame n number of times with positional spec
- asp.net-core-mvc - Values changed in inputs on one tab are echoed and overwrite values on other tabs
- numpy - input reshape problem about using tf.layers.conv3d
- reactjs - 在画布上进行文本处理后提取图像数据url,并在Material-UI的CardMedia中显示结果
- vuejs2 - 事件和自引用组件 vue.js