【问题标题】:python while loop inside a for loop not breakingpython while循环在for循环内不中断
【发布时间】:2014-03-22 22:24:18
【问题描述】:

为什么这个 for 循环不会中断?我得到的只是 stats 变量的第一个字母和从 0 到无穷大的计数。

x = 0

for letter in range(0,len(stats)):
    while True:
        if stats[letter] != ',':
            x += 1
            print(stats[letter])
            print (x)
        elif stats[letter] == ',':
            break
    break
    print(stats[letter])

【问题讨论】:

  • 您到底想解决什么问题?可悲的是,您的实际代码有很多逻辑错误:(
  • 删除while True:及其break
  • 代码陷入无限循环,因为 letter 在 while 循环内从未更改。
  • 从代码的外观来看,很难说出你在这里实际想要完成什么——但是,如果你让我们知道,我敢打赌 python 有一个更干净的方法您要解决的实际问题。

标签: python for-loop while-loop break


【解决方案1】:

它不会中断,因为您的 letter 在 while 循环中永远不会改变。如果

stats[letter] != ','

while 循环的开头,该分支将被一遍又一遍地接管。

【讨论】:

    【解决方案2】:

    这是您要解决的问题吗?内置的enumerate() 为您提供indexvalueiterable

    >>> stats = 'this is my stats string, which is iterated until comma'
    >>> for index, letter in enumerate(stats):
    ...     if letter == ',':
    ...         break
    ...     print index, letter
    ...     
    ... 
    0 t
    1 h
    2 i
    3 s
    4  
    5 i
    6 s
    7  
    8 m
    9 y
    10  
    11 s
    12 t
    13 a
    14 t
    15 s
    16  
    17 s
    18 t
    19 r
    20 i
    21 n
    22 g
    >>> 
    

    【讨论】:

      【解决方案3】:
      for letter in range(0,len(stats)-1):
      
          if stats[letter] != ',':
              x += 1
              print(stats[letter])
              print (x)
          elif stats[letter] == ',':
              break
      
      print(stats[letter])
      

      我认为上面的代码就是你所追求的。您不需要 while 循环,for 循环将测试字符串 stats 中的每个字母,并在您到达逗号时中断。

      如果字符串中没有逗号,最后一行将打印一个逗号或最后一个字母。我还更改了循环限制,因为我认为测试不存在的字符时会出错。

      编辑:它对我有用,尽管我认为另一个答案是这样做的更好方法。我在下面运行了这个测试脚本,每次遇到逗号都会中断。

      #!/usr/bin/python
      
      def SO_answer(stats):
      
      x = 0
      
      for letter in range(0,len(stats)-1):
              if stats[letter] != ',':
                  x += 1
                  print(stats[letter])
                  print (x)
              elif stats[letter] == ',':
                  break
      
      print(stats[letter])
      
      
      SO_answer("test")
      
      SO_answer("testing, 1, 2, 3")
      
      SO_answer("Here's a long string with a comma at the end,")
      
      SO_answer(",,,,,")
      

      【讨论】:

      • 那种工作,但是我得到: t e s t , t 当 test 是 stats 的值时作为输出
      猜你喜欢
      • 2019-11-10
      • 2015-02-24
      • 1970-01-01
      • 2018-11-05
      • 2012-09-19
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 2020-10-09
      相关资源
      最近更新 更多