鱼C论坛

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

水仙花for循环可以嵌套么,逻辑是怎样的

[复制链接]
发表于 2021-9-25 12:56:11 | 显示全部楼层 |阅读模式

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

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

x
水仙花逻辑问题.png
不知道图片传上去没有
代码:
for z in range(10):
    for y in range(10):
        for x in range(1,10):
            i = z + y*10 + x*100
            if z**3 + y**3 + x**3 == i:
                print(i)
                break/(continue是一样的)
输出结果:
370
371
153
407
请问这个代码的逻辑是怎样的,break跳出后到哪里去了?希望能得到详细解答
我的猜想:
z按顺序选1,y按顺序选7,x按顺序选3
i=371
1**3+7**3+3**3==371判定成立
打印371,跳出x循环到y循环,此时z还是等于1,y=7,x按顺序选4
i=471
1**3+7**3+4**3==471判定不成立
跳出x循环到y循环,当x从0取到9全部判定完成,z还是等于1,此时y=8继续判定x从0-9
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-25 13:03:53 | 显示全部楼层
debug一下  直接全清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-25 13:16:49 | 显示全部楼层
本帖最后由 柿子饼同学 于 2021-9-25 15:02 编辑

先是z = 0, y = 0, x = 1, 然后 x = 2 , 等到 x = 9 的下一次是 , 变成 z = 0, y = 1, x = 0 酱紫
顺序 :
>>> for i in range(10):
        for j in range(10):
                for s in range(10):
                        print(i * 100 + j *10 + s, end = ' ' )

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 18
就是 x 每到 9 的下一次 , y 就加一 , y 每次到 9 的下一次 , z 就加一,
不明白可以运行下面的代码试试
for z in range(10):
        for y in range(10):
                for x in range(10):
                        print(z, y, x)
break 只能跳出一层循环 , 也就是跳出 for x in range(10) , 继续执行 for y in range(10)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-25 13:33:56 | 显示全部楼层
        break 跳出的是最贴身的那层循环,对于本例而言,就是 for x in range(1 , 10),跳出后,会直接来到 for y in range(10) 处继续执行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-25 15:22:22 | 显示全部楼层
柿子饼同学 发表于 2021-9-25 13:16
先是z = 0, y = 0, x = 1, 然后 x = 2 , 等到 x = 9 的下一次是 , 变成 z = 0, y = 1, x = 0 酱紫
顺序 :  ...

非常感谢您的指导,请问您:
按照for的嵌套等级逻辑,若z = 0,y = 0,x = 3时满足条件跳出for x in range(10)循环,继续执行for y in range(10),那么在这个时候y取什么值?x取什么值?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-25 15:24:10 | 显示全部楼层
jackz007 发表于 2021-9-25 13:33
break 跳出的是最贴身的那层循环,对于本例而言,就是 for x in range(1 , 10),跳出后,会直接来 ...

非常感谢您的指导,请问您:
按照for的嵌套等级逻辑,若z = 0,y = 0,x = 3时满足条件跳出for x in range(10)循环,继续执行for y in range(10),那么在这个时候y取什么值?x取什么值?
是y还是取0,x继续取4?
还是y直接取1,x从0开始取?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-25 15:24:47 | 显示全部楼层
李二蛋 发表于 2021-9-25 15:22
非常感谢您的指导,请问您:
按照for的嵌套等级逻辑,若z = 0,y = 0,x = 3时满足条件跳出for x in ran ...

是y还是取0,x继续取4?
还是y直接取1,x从0开始取?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-25 16:49:36 | 显示全部楼层
本帖最后由 柿子饼同学 于 2021-9-25 16:51 编辑
李二蛋 发表于 2021-9-25 15:24
非常感谢您的指导,请问您:
按照for的嵌套等级逻辑,若z = 0,y = 0,x = 3时满足条件跳出for x in ran ...


我简单举个栗子 , 可以看到满足条件时, i 加 1 , j 归 0
所以你那个也是一样的 , x == 3 时 , y 加一 , x 归零
有些问题 , 自己可以试一试 , 学习后的效果更好
>>> for i in range(5):
        for j in range(5):
                if j == 3:
                        break
                print(i, j)

0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
3 0
3 1
3 2
4 0
4 1
4 2
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-25 16:53:50 | 显示全部楼层
本帖最后由 jackz007 于 2021-9-25 17:10 编辑
李二蛋 发表于 2021-9-25 15:24
非常感谢您的指导,请问您:
按照for的嵌套等级逻辑,若z = 0,y = 0,x = 3时满足条件跳出for x in ran ...


       比如你的代码,第一次执行 break 的时候,z = 0, y = 7 , x = 3,i = 370,跳出 for x in range(1 , 10) 意味着 for y in range(10) 循环的 y = 7 的那次循环已经结束,下一次的循环就是 y = 8 了,也就是 z = 0 , y = 8,然后,完成 for x in range(1 , 10) 的循环,这个循环也将执行 9 次,会继续完成对 i 值分别为 180、280、380、480、580、680、780、880、980 一共 9 个值的验证和筛选。
       当 z = 0 for y in range(10) 的循环完成时,会返回到 for z in range(10) 处继续,这时,循环变量 z 的下一个数值是 z = 1 ,于是,在 z = 1 的条件下,又开始了新一轮的  for y in range(10) 的循环。当然,对于内层循环 for x in range(1 , 10),它和其外层性循环 for y in range(10) 的关系和前面说的情况完全一样。嵌套循环内外层的关系是,外环走一步,内环走一圈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-25 21:56:18 | 显示全部楼层

开卷有益,多多益善····
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 04:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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