2015-10-20 5 views
-1
def n(): 
     name = input('What is the missing animal?') 
     if name == 'dog': 
       print('Well done') 
     else: 
     print('Sorry this is not right') 
     rep= 0 
     while rep < 5: 
        n() 
     rep = rep + 1 
     if rep == 5: 
       print ('You have guessed incorrectly 5 times.) 

Когда я запускаю это и неправильно отвечаю, программа продолжает повторяться, а не повторять максимум 5 раз.Почему цикл while не работает в цикле if?

Любые идеи?

+1

Рекурсивный вызов начинается с 0. Вы никогда не попадаете на вторую итерацию цикла while. – Prune

+1

'if' не является циклом; это ответвление. – chepner

ответ

2

Какая неудобная рекурсия. :)

Проблема в том, что переменная rep локально ограничена, то есть не передается рекурсивному вызову.

Вы должны поставить на охрану while и использовать переменную success с помощью while, чтобы проверить, нужно ли снова зацикливать.

Рекурсии не требуется.

EDIT: Как это:

def n(): 
    rep= 0 
    success = 0 
    while rep < 5 or success == 1: 
     name = input('What is the missing animal?') 
     if name == 'dog': 
      success = 1 
     else: 
      print('Sorry this is not right') 
      rep = rep + 1 
    if rep == 5: 
     print ('You have guessed incorrectly 5 times.') 
    elif success == 1: 
     print('Well done') 

Извините за отступа.

+0

Я попытался поставить петлю на улице, однако, когда я это делаю, и, я думаю, правильное животное, он все время спрашивает меня, что такое пропавшее животное[email protected] – Francis

+0

Именно поэтому вам нужно также проверить «успех». Вы также можете использовать 'break', как в ответе Заха. – Victor

-3

Вы должны инициализировать переменную rep вне определения функции, как всякий раз, когда вы вызываете свою функцию n(), она инициализируется до 0, и она никогда не будет увеличиваться. и программа будет работать.

Кроме того, вы должны вызвать функцию п() после того, как приращение переменного респа, потому что в противном случае он никогда не достигнет заявления

rep = rep + 1 

.

Так что ваш код должен быть чем-то вроде этого.

rep= 0 
def n(): 
    name = input('What is the missing animal?') 
    if name == 'dog': 
     print('Well done') 
     rep = 0 # re initialize rep for future usage 
     return # guessed correctly so should exit the method. 
    else: 
     print('Sorry this is not right') 

    while rep < 5: 
     rep = rep + 1 
     n() 
    if rep == 5: 
     print ('You have guessed incorrectly 5 times.) 
     rep = 0 # re initialize rep for future usage 
2
def n(): 
    for rep in range(5): 
     name = input('What is the missing animal?') 
     if name == 'dog': 
      print('Well done') 
      break 
     else: 
      print('Sorry this is not right') 
    else: 
     print ('You have guessed incorrectly 5 times.') 

Поскольку вы знаете, сколько раз вы хотите, чтобы пройти через петлю, в для это (возможно) более целесообразным. Операция else для для цикла обрабатывает случай, когда вы закончите, не получив правильного ответа.

0

Вы продолжаете вызывать метод n() снова и снова в инструкции else. Я считаю, что этот код будет работать по вашему желанию:

def n(): 
    rep= 0 
    while rep < 5: 
     name = input('What is the missing animal? ') 
     if name == 'dog': 
      print('Well done') 
      break 
     else: 
      print('Sorry this is not right') 
     rep = rep + 1 
    if rep >= 5: 
     print ('You have guessed incorrectly 5 times.') 

Выполняет цикл 5 раз, если вы не получите ответ правильно. Если ответ верный, цикл будет break, что означает, что он перестает работать. В конце он проверяет, превышает ли rep больше (что никогда не будет) или равно (что происходит в 5-м цикле) и печатает окончательное сообщение, если оно зациклировано 5 раз.

+0

Большое вам спасибо, это сработало отлично! – Francis

+0

Добро пожаловать! –

0

Вот правильный способ рекурсии. Хотя это хвост рекурсивный, поэтому я бы разворачивал его в цикл, как @Prune.

def n(rep=0): 
    if n >= 5: 
     print ('You have guessed incorrectly 5 times.') 
    else: 
     name = input('What is the missing animal?') 
     if name == 'dog': 
      print('Well done') 
     else: 
      n(rep+1) 
Смежные вопросы