鱼C论坛

 找回密码
 立即注册
查看: 1314|回复: 6

[已解决]循环结构求助。

[复制链接]
发表于 2022-4-29 08:54:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
关于求水仙花数的问题, 我用了新的思路写了一下, 代码出现了个细节问题, 我找不出来。 求大佬帮忙看看。
题目是这样子的。
0. 编写一个程序,求解 100~999 之间的所有水仙花数。
科普:

如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。

这次我用的思路是, 将循环中每一个数转化为字符串, 然后用 in 指令将字符串中每一个字符提取出来 转换成整型相加来判断是否是水仙花数。 具体代码如下:

for i in range(100, 1000):
    i = str(i)
    sum1 = 0
    for each in i:
        each = int(each)
        sum1 += each ** 3
        numb = i
        numb = int(numb)
        if sum1 == numb:
            print(numb)

运算结果如下:
153
370
370
371
407

多了一个370   没搞懂问题出在哪里。 求大佬解答。
最佳答案
2022-4-29 09:00:24
因为你把

numb = i
    numb = int(numb)
    if sum1 == numb:
        print(numb)

这一块放在内层循环里面,每一次内层循环都会执行一遍,

前两位已经满足 sum1 == numb,而最后一个为0不影响 sum1 的值,所以就打印了两次

所以对结果的判断你应该放在内层循环的外面

故对你的代码修改如下:
for i in range(100, 1000):
    i = str(i)
    sum1 = 0
    for each in i:
        each = int(each)
        sum1 += each ** 3
    numb = i                                 # 这里开始不要缩进内层循环里面
    numb = int(numb)
    if sum1 == numb:
        print(numb)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-29 09:00:24 | 显示全部楼层    本楼为最佳答案   
因为你把

numb = i
    numb = int(numb)
    if sum1 == numb:
        print(numb)

这一块放在内层循环里面,每一次内层循环都会执行一遍,

前两位已经满足 sum1 == numb,而最后一个为0不影响 sum1 的值,所以就打印了两次

所以对结果的判断你应该放在内层循环的外面

故对你的代码修改如下:
for i in range(100, 1000):
    i = str(i)
    sum1 = 0
    for each in i:
        each = int(each)
        sum1 += each ** 3
    numb = i                                 # 这里开始不要缩进内层循环里面
    numb = int(numb)
    if sum1 == numb:
        print(numb)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-4-29 09:04:50 | 显示全部楼层
>>> [x for x in range(100,1000) if (x//100)**3+(x%10)**3+(x//10%10)**3==x]
[153, 370, 371, 407]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-29 09:24:42 | 显示全部楼层
wp231957 发表于 2022-4-29 09:04
>>> [x for x in range(100,1000) if (x//100)**3+(x%10)**3+(x//10%10)**3==x]
[153, 370, 371, 407]

嗯啊, 这个我做出来了的。 我只是好奇如果用字符串的方式直接拿出来应该怎么做。 然后我弄出的结果多了一个370 还找不到为什么。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-29 09:35:30 | 显示全部楼层
爱笑的无赖 发表于 2022-4-29 09:24
嗯啊, 这个我做出来了的。 我只是好奇如果用字符串的方式直接拿出来应该怎么做。 然后我弄出的结果多了 ...

那就没啥必要了
你要先把int转成字符串  计算时 再把字符串转成int   明显多了两道手续   划不来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-29 09:37:27 | 显示全部楼层
isdkz 发表于 2022-4-29 09:00
因为你把

numb = i

内嵌循环真的太头疼了。 盯了代码整整10分钟, 才弄明白你说的东西。
非常感谢大神的帮助之恩。瑞思拜~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-29 10:45:19 | 显示全部楼层
wp231957 发表于 2022-4-29 09:35
那就没啥必要了
你要先把int转成字符串  计算时 再把字符串转成int   明显多了两道手续   划不来的

哈哈哈  是的。 这会不是学习敲代码嘛, 就当练习巩固 哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 14:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表