【问题标题】:nesting while loops, looping through one while loop repeatedly until the other loop has completed嵌套while循环,反复循环一个while循环,直到另一个循环完成
【发布时间】:2022-10-12 23:44:42
【问题描述】:

我正在尝试使用 2 个 while 循环来返回值 ij

下面:

i=0
j=0
while i < 50:
    while j < 5:
        print('i: ' + str(i))
        print('j: ' + str(j))
        j += 1
    i += 10

结果是:

i: 0
j: 0
i: 0
j: 1
i: 0
j: 2
i: 0
j: 3
i: 0
j: 4

但是我试图得到:

i: 0
j: 0
i: 0
j: 1
i: 0
j: 2
i: 0
j: 3
i: 0
j: 4

i: 10
j: 1
i: 10
j: 2
i: 10
j: 3
i: 10
j: 4

i: 20
j: 1
i: 20
j: 2
i: 20
j: 3
i: 20
j: 4

etc...

我哪里错了?

【问题讨论】:

  • 请给出第一个示例的完整输出。不可能以i 结尾,打印为0
  • 在您的代码中,您在哪里看到 j 被重置为 0,或以任何方式减少?您在两个循环之外将其初始化为 0 一次。之后,它只会从内部循环内部发生变化。因此,一旦内部循环第一次完成,它将永远不会再次运行。你真的应该学会调试这种东西。
  • Cory 展示了如何解决您的问题。我还建议您了解range() 功能。您可以将它与 for 循环一起使用来获得所需的输出,而不是 while 循环。
  • 另外,[这篇文章[(ericlippert.com/2014/03/05/how-to-debug-small-programs) 有一些调试代码的好技巧。

标签: python


【解决方案1】:

您应该在进入内部 while 循环之前重新初始化 j

i = 0
while i < 50:
    j = 0
    while j < 5:
        print('i: ' + str(i))
        print('j: ' + str(j))
        j += 1
    i += 10

作为旁白而不是嵌套循环,我会在这里使用itertools.product

from itertools import product
for i, j in product(range(0,50,10), range(5)):
    print(f'i: {i}')
    print(f'j: {j}')

【讨论】:

    【解决方案2】:

    它正在做你想做的一切只是不能打印它,因为 j = 5 所以嵌套的 while 循环已经是假的,只需将 j 的声明移动到 while 循环中

    i=10
    while i < 50:
        j=0
        while j < 5:
            print('i: ' + str(i))
            print('j: ' + str(j))
            j += 1
            continue
        i += 10
    

    【讨论】:

      【解决方案3】:

      i+=10 之后,执行j=0。 您也可以使用print(f'{i=}') 打印变量。

      【讨论】:

      • 请花一些时间和精力来清理您的帖子。这真的很难读。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      • 2019-03-08
      • 2016-04-08
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      • 2018-05-14
      相关资源
      最近更新 更多