【问题标题】:While Loop Counter ConfusionWhile 循环计数器混淆
【发布时间】:2020-11-13 17:59:29
【问题描述】:

我正在使用 while 循环,但我对如何以我想要的方式摆脱它有点困惑。所以我在 while 循环中嵌套了一个 for 循环:

x = True
y = 0
while x:
  if y >= 5:
    x = False
    print('break')
  else:
      for x in range(7):
        y += 1 
        print('test')

我正在寻找的输出是打印出 5 个测试和一个中断。但是,每次我运行程序时,它都会在中断之前打印出 7 个测试。我不太确定,但我想我只是对 while 循环中的某些东西感到困惑!如果有人可以向我解释这一点,请告诉我:) 我已经找到解决方法,但我想了解它为什么不起作用。

【问题讨论】:

    标签: python while-loop counter nested-loops break


    【解决方案1】:

    这是因为它在 while 循环中执行整个 for 循环,因此在再次检查之前 y 将变为 7。删除 for 循环将解决此问题。

    x = True
    y = 0
    while x:
      if y >= 5:
        x = False
        print('break')
      else:
        y += 1 
        print('test')
    

    【讨论】:

      【解决方案2】:

      试试

      i = 0
      while True:
          if i == 5:
              break
          print('test')
          i = i + 1
      

      【讨论】:

        【解决方案3】:

        因为内循环将在外循环的下一次迭代之前完成。 IE。一旦内部循环开始,它会在开始 while 循环的下一次迭代之前执行所有 7 次迭代。

        您只需使用一个循环即可做到这一点。打印出“test”增加计数器,并在计数器为5时放入if条件中断。

        【讨论】:

          【解决方案4】:
          y = 0
          while y < 5:
            print("test")
            y += 1
          print("break")
          

          会工作的。

          当 while 循环允许您直接设置条件时,为 while 循环添加另一个变量(如“x”)是没有意义的。

          【讨论】:

            【解决方案5】:

            打印 7 tests 而不是 5 的原因是,您的整个 for 循环在您返回 while 语句的开头之前执行。我认为您的理解是,在 for 循环的一次迭代之后,您会回到 while 循环的开头,但这是不正确的:您的 for 循环在回到开头之前完全执行while 循环。

            进入for 循环后,将y 递增7 次并打印test 7 次。 y 现在 >= 5,你回到你的 if 语句。 if 语句将 x 变为 false,从而“关闭”while 循环,并打印 break 语句。如果您只想打印出 5 个tests 和一个break,那么简化代码会容易得多:

            y = 0
            while True:
                if y < 5:
                    print('test')
                    y += 1
                else:
                    print('break')
                    break
            

            【讨论】:

            • 谢谢这个解释很清楚,我现在可以更好地理解它了!真的很感激:)
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-01-02
            • 1970-01-01
            • 2023-02-02
            • 2016-04-02
            • 1970-01-01
            • 2015-11-09
            • 1970-01-01
            相关资源
            最近更新 更多