2014-02-21 3 views
1

Зачем это делать для перерыва цикла? все, что я получаю, это первая буква переменной статистики и число от 0 до бесконечного.python while loop внутри цикла 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

remove 'while True:' и его 'break' – theAlse

+0

Код попадает в бесконечный цикл, потому что' letter' никогда не менялся внутри цикла. – HumptyDumptyEIZ

ответ

1

Он не ломается, потому что ваш letter никогда не будет изменен в то время цикла. если

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 и сломается, когда вы перейдете в запятую.

В последней строке будет напечатана либо запятая, либо последняя буква, если в строке нет запятой. Кроме того, я изменил пределы цикла, поскольку, как я думаю, вы получите ошибку при тестировании персонажа, которого не существует.

EDIT: Это работает для меня, хотя я думаю, что другой ответ - лучший способ сделать это. Я запустил этот тестовый скрипт ниже, и он разбился каждый раз, когда он попал в запятую.

#!/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() дает вам 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 
>>> 
Смежные вопросы