2014-11-13 2 views
0

Как мне закрыть цикл «while», чтобы программа не кончилась бесконечно?Как мне закрыть цикл «while», чтобы программа не зацикливалась бесконечно?

def letter_guess(guess): 

    if guess in word: 
     return True 
    else: 
     return False 

def correct_letter(guess): 
    guess = guess 
    if letter_guess(guess) == True: 
     print ('Correct: ' + guess) 
    else: 
     wrong_letter(guess) 

def wrong_letter(guess): 
    guess = guess 
    if letter_guess(guess) == False: 
     print('Wrong: ' + guess) 
    else: 
     correct_letter(guess) 

#Program starts here 
word = 'samsung' 
guess = raw_input('Guess a letter: ') 
while guess !='': 

    letter_guess(guess) 

    correct_letter(guess) 

    wrong_letter(guess) 

Программа должна получать исходный ввод и определять, находится ли вход в слове «слово». Затем он должен продолжать задавать один и тот же вопрос вместо цикла бесконечно.

ответ

0

Ask raw_input внутри бесконечного цикла и сломаться, если ваши условия не выполняются

while True: 
    # your algorithm 
    # ... 
    if not satisfied: 
     break 
+0

почему downvote ... –

1

Вы должны переместить вход внутри цикла. Пока вы на него, вы можете также упростить остальную часть логики:

while True: 
    guess = raw_input('Guess a letter or press Enter to stop: ') 
    if guess == '': 
     break 
    if guess in word: 
     print('Correct') 
    else: 
     print('Incorrect') 
0

Почему бы не установить переменный флаг глобально, который модифицирован правильным предположение? То есть в начале вашего скрипта, объявить flag = false, а затем проверить флаг в качестве условия в ваше время цикла, такие как

while guess !='' && flag == false: 

И в correct_letter():

def correct_letter(guess): 
    guess = guess 
    if letter_guess(guess) == True: 
     print ('Correct: ' + guess) 
     flag = true 
    else: 
     wrong_letter(guess) 
+0

Это не будет установите глобальный флаг ', а скорее создайте локальный флаг' flag'. Использование глобального - это плохая идея, 'flag == false' будет лучше выражаться как' not correct_letter (guess) '. Наконец, тестирование на равенство с булевым бессмысленно. Либо значение истинно, ни сравнение не требуется, либо оно ложно, и в этом случае 'not val' лучше, чем' val == False'. – Dunes

Смежные вопросы