mumei2018 发表于 2023-7-21 14:48:28

为啥初始化放循环外 大循环就不循环了是咋回事呢?

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
我这循环流程思维还是不行吗?哪里错了呢?


isdkz 发表于 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,以此来确保内循环能够正常运行。

Mike_python小 发表于 2023-7-21 14:48:56

问题可能出在循环嵌套中的变量共享上。

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

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

以下是修正后的代码示例:


j = 1
while j < 10:
    i = 9# 将 i 的初始化放在内层循环开始处
    while i >= j:
      print(i, '*', j, '=', str(i*j).zfill(2), end=', ')
      i -= 1
    print()
    j += 1


现在,每次外层循环迭代都会重新初始化内层循环的变量 i,并根据之前的计算结果进行迭代,从而产生预期的输出。

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

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

mumei2018 发表于 2023-7-21 14:58:51

真是一说就会 一做就跪 谢谢各位了
页: [1]
查看完整版本: 为啥初始化放循环外 大循环就不循环了是咋回事呢?