2014-02-21 68 views
1

为什么这不会循环休息?我得到的只是stats变量的第一个字母和一个从0到无限的计数。蟒蛇while循环里面的for循环不打破

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]) 
+1

你究竟在试图解决什么问题?可悲的是,你的实际代码有很多逻辑错误:( – thefourtheye

+1

删除'while True:'和它的'break' – theAlse

+0

代码陷入无限循环,因为在while循环内'letter'永远不会改变 – HumptyDumptyEIZ

回答

1

它不破,因为你letter从来没有在while循环得到改变。如果

stats[letter] != ',' 

while循环的开始,那么该分支将被采用了一遍又一遍。

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]) 

我觉得上面的代码就是你以后的样子。您不需要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(",,,,,") 
+0

那种工作方式,但是我得到了:test,t是测试时的输出值,是统计值 –

0

这是你想要解决什么?内建enumerate()为您提供和valueiterable

>>> 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 
>>>