Python输出四叶玫瑰数相关有趣的问题

#s2-7 四叶玫瑰数
运用此代码可以计算出4位数当中的所有四叶玫瑰数

n = 0   #统计个数的计数器,初值为0
# 请在下面编写代码
# ********** Begin ******** #
num=0
for i in range(1000,9999):
    sum = 0    #初始值 
    num=str(i)
    for i in num:     # n= '123'  遍历  i='2'
        sum +=  int(i)**4   #sum = 36
        if sum == eval(num):  
            n=n+1
            print(sum)
# ********** End ********** #
print('共有{}个四叶玫瑰数'.format(n))

输出的结果为

1634
6688
8208
9474
共有4个四叶玫瑰数

然而手动计算后你会发现6688不属于四叶玫瑰数
6688=6^4 +6^4 + 8^4
6688≠6^4 +6^4 + 8^4 + 8^4
并且同源的代码可以验证此问题

n = input()  #输入数据
result = '都不是'
if len(n) == 3:
    sum = 0    #初始值 
    for i in n:     # n= '123'  遍历  i='2'
        sum +=  int(i)**3    #sum = 36
    if sum == eval(n):  
        result = '水仙花数'
#请在下面补充代码,完成程序功能
########## Begin ########
elif len(n)==4:
    sum = 0    #初始值 
    for i in n:     # n= '123'  遍历  i='2'
        sum +=  int(i)**4   #sum = 36
    if sum == eval(n):  
        result = '四叶玫瑰数'
print(result)
########## End ##########

输入6688得到

6688
都不是

由此可知6688确实不属于四叶玫瑰数,但第一个源代码能以同源于第二个的源代码计算出不属于四叶玫瑰数的6688。多次修改查找后并无发现代码上面的问题。
有同学知道这是为什么呢?究竟是哪里出错了。

根据评论区小伙伴的帮助指出是if缩进具有问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值