2014-02-21 7 views
1

왜 루프 브레이크가되지 않습니까? 내가 얻는 것은 stats 변수의 첫 문자와 0에서 무한대까지입니다. 당신의 letter이 while 루프에서 변경하지 도착 않기 때문에파이썬 while 루프 while 루프는 깨지지 않는다

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

'True :'와 그 'break'를 제거하십시오 – theAlse

+0

코드는 루프 내에서 결코 변경되지 않기 때문에 무한 루프가됩니다. – HumptyDumptyEIZ

답변

1

이 중단되지 않습니다. while 루프의 시작 부분에

stats[letter] != ',' 

경우, 그 지점은 다시 점령 할 것입니다.

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 테스트 결과가 stats의 값일 때 t –

0

해결하려는 것입니까? enumerate()index이고 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 
>>>