鱼C论坛

 找回密码
 立即注册
查看: 5906|回复: 9

[已解决]python课后题

[复制链接]
发表于 2017-3-2 15:41:22 | 显示全部楼层 |阅读模式
2鱼币

编程实现100~999之间的水仙花数,例如153 = 1^3 + 5^3 + 3^3就是水仙花数

for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
        sum = sum + (temp %10) ** 3
        temp //= 10         # 注意这里要使用地板除哦~
    if sum == i:
        print(i)
请问程序中的temp = i 为什么不能去掉,即程序中只使用i,不用temp
最佳答案
2017-3-2 15:41:23
首先,在range(100,1000)内随机取个 i 值,这时候 i 值是固定的,while循环里面进行循环操作的是被赋值的temp,一次次地板除的过程中是不断变化的,当while为false的时候,跳出循环,这时候输出的值是 i ,而不是temp,这个时候的temp是 i 值的百位数
所以,不能取消temp = i 这个赋值过程
第一次答题,有点乱,谅解(刚学编程两三天..)
捕获7.PNG

最佳答案

查看完整内容

首先,在range(100,1000)内随机取个 i 值,这时候 i 值是固定的,while循环里面进行循环操作的是被赋值的temp,一次次地板除的过程中是不断变化的,当while为false的时候,跳出循环,这时候输出的值是 i ,而不是temp,这个时候的temp是 i 值的百位数 所以,不能取消temp = i 这个赋值过程 第一次答题,有点乱,谅解(刚学编程两三天..)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-2 15:41:23 | 显示全部楼层    本楼为最佳答案   
首先,在range(100,1000)内随机取个 i 值,这时候 i 值是固定的,while循环里面进行循环操作的是被赋值的temp,一次次地板除的过程中是不断变化的,当while为false的时候,跳出循环,这时候输出的值是 i ,而不是temp,这个时候的temp是 i 值的百位数
所以,不能取消temp = i 这个赋值过程
第一次答题,有点乱,谅解(刚学编程两三天..)

评分

参与人数 1荣誉 +3 鱼币 +5 收起 理由
~风介~ + 3 + 5 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-2 16:43:55 | 显示全部楼层
temp //= 10   就把i的值改变 了
最后
   if sum == i:
        print(i)

结果就不是你想要的那个数字,而是地板除法之后的结果了,貌似是0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-3 20:33:47 | 显示全部楼层
此时if不在while循环内,得用temp做临时变量,while循环内的temp会变,而if不变,
print('==========find all numbers of flowers between 100 and 999==========')

for i in range(100,999):
    hundreds = i // 100
    tens = i % 100 //10
    units = i % 10
    if i == hundreds ** 3 + tens ** 3 +units ** 3:
        print(i)
     这样也是可以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-3 21:51:10 | 显示全部楼层
版权所有:ooxx7788 ,他解答的,不用给我悬赏鱼币,我也学到了东西
如果只使用i,而你加中间变量,i //= 10 地板除以后,i的值就被重新赋值了,不是for循环里的i了,也就 sum == i ,是不存在的。还有妹纸你用sum 这个做变量名的时候,有没有注意到,它本身就是个BIF的函数(打开IDLE,sum的颜色和print的颜色是一样的),这种最好不要做变量名
)O{UKBIUGEA4YBHC4UA~GGU.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-4 15:42:24 | 显示全部楼层
使用temp是为了替代i来进行计算,如果只用i,那么在执行 if sum==i前,i的值就已经改变了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-7 14:17:03 | 显示全部楼层
"temp = i " 赋值语句必须存在,否则会导致 for循环仅能运算一次,也就是i=100, 101 - 999不会运行。
解释如下:
假设程序中只使用i,我们看一下while循环:
while i:
        sum = sum + (i %10) ** 3
        i //= 10
i=100时,当执行while循环后,i的值会成为0,直接脱离for循环“for i in range(100, 1000):”,程序结束


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-7 14:18:11 | 显示全部楼层
sssnujj 发表于 2017-3-2 16:37
首先,在range(100,1000)内随机取个 i 值,这时候 i 值是固定的,while循环里面进行循环操作的是被赋值的te ...

非常正确,赞一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-7 14:24:29 | 显示全部楼层
爱上Q的球 发表于 2017-3-3 20:33
此时if不在while循环内,得用temp做临时变量,while循环内的temp会变,而if不变,
print('==========find  ...

很流畅的思路:),我在网上看到的一个算法和你的类似
for a in range(1,10):
    for b in range(0,10):
        for c in range(0,10):
            if a*100 + b*10 +c == a**3 + b**3 + c**3:
                print(a*100+b*10+c)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-7 14:26:49 | 显示全部楼层
ButcherRabbit 发表于 2017-3-3 21:51
版权所有:ooxx7788 ,他解答的,不用给我悬赏鱼币,我也学到了东西
如果只使用i,而你加中间变量,i //=  ...

赞一个“sum属于内置函数,最好不要当成变量名”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 15:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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