鱼C论坛

 找回密码
 立即注册
查看: 1991|回复: 3

[已解决]为啥初始化放循环外 大循环就不循环了是咋回事呢?

[复制链接]
发表于 2023-7-21 14:48:28 | 显示全部楼层 |阅读模式

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

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

x
i = 9
j = 1
while j < 10:
    #i = 9  放这里就没事
    while i >= j:
        print(i, '*', j, '=', (str(i*j)).zfill(2), end = ', ')
        i -= 1
    print()
    j += 1

把i = 9 放外面 大循环就不循环了 只做一次 我本来觉得都一样  我的想法是 大循环是J < 10 内循环第一次结束收 j+=1 j = 2 然后应该以j = 2 重做一次内循环 直到j = 9
我这循环流程思维还是不行吗?哪里错了呢?


最佳答案
1970-1-1 08:00:00
初始化在循环外就不正常.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-21 14:48:53 | 显示全部楼层
问题的根源在于,你在大循环 while j < 10: 中没有重置  i  的值。在内循环 while i >= j: 中,你的 i 的值在每次迭代中都会减少,直到 i 不再大于或等于 j ,循环才会停止。然后, j 增加1,开始新的大循环。

然而,当你进入新的大循环时, i 的值并没有重置为9,而是保持在上一次大循环结束时的值。如果 i 的值已经小于 j ,那么新的大循环中的内循环将不会执行,因为 i >= j 已经不成立。

你将 i = 9 放在内循环中是正确的,因为这样可以在每次大循环开始时重置 i 的值。如果你将 i = 9 放在外面,那么你就需要在大循环的末尾或开始处手动重置 i 的值。所以,应该这样写:
j = 1
while j < 10:
    i = 9
    while i >= j:
        print(i, '*', j, '=', (str(i*j)).zfill(2), end = ', ')
        i -= 1
    print()
    j += 1

上述代码将在每次大循环开始时重置 i 的值为9,以此来确保内循环能够正常运行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-21 14:48:56 | 显示全部楼层
问题可能出在循环嵌套中的变量共享上。

在你的代码中,将 i = 9 放在外层循环之前,意味着在外层循环的每次迭代中,i 的值都会被重置为 9。这导致内层循环中的 i 总是大于等于 j,并且只会进行一次迭代。

当你把 i = 9 放在内层循环中时,i 的初始值只会被设置一次,而不会在每次外层循环迭代时重置。这样,在外层循环的每次迭代中,内层循环都会根据先前的计算结果进行迭代。

以下是修正后的代码示例:
j = 1while j < 10:    i = 9  # 将 i 的初始化放在内层循环开始处    while i >= j:        print(i, '*', j, '=', str(i*j).zfill(2), end=', ')        i -= 1    print()    j += 1
现在,每次外层循环迭代都会重新初始化内层循环的变量 i,并根据之前的计算结果进行迭代,从而产生预期的输出。

希望这个解释能够帮助你理解问题所在。如果你还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-21 14:58:51 | 显示全部楼层
真是一说就会 一做就跪 谢谢各位了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 09:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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