Как я могу остановить цикл после максимального неправильного ответа?

#python #python-3.x #while-loop

#python #python-3.x #цикл while

Вопрос:

Это упражнение из введения в CompSci и программирование на Python от OCW MIT. Я немного изменил его. Проблема в том, что я хочу остановить программу, когда я достиг максимального неправильного ответа, но она останавливается, если я попытаюсь два раза. Почему два раза? Как я могу это исправить? Как новичок я должен задавать здесь каждый вопрос? Спасибо всем

 n = 0
max_guesses = 3
n = input("You are in the Lost Forestn****************n****************n :)n****************n****************nGo left or right? ")

if n == "left" or "Left":
    print("You're out of lost forest")
while n == "right" or n == "Right":
    n = input("You are in the Lost Forestn****************n******       ***n  :(n****************n****************nGo left or right? ")
    n =  1
    for n in range (max_guesses):
        break
print("Game over! You ran out of your lives")
  

Комментарии:

1. break

2. Break работает, но, как я уже сказал, это дает мне только две жизни, даже если я изменю max_guesses на 5, он все равно остановится после 2 попыток

3. почему n=0 а затем строка? зачем устанавливать n значение 1 и перезаписывать входные данные? вы имели в виду `n = 1` (увеличьте n на 1? вы не можете сделать это со строкой), поскольку цикл не имеет смысла — используйте if n >live_count: break — затем распечатайте isdead-сообщение

4. Я думаю, вы не поняли, что range делает и что делает in оператор. Если вы хотите проверить, n равно ли max_guesses , просто используйте n == max_guesses .

5. Я понял, что есть проблема с string и int, но это все еще дает мне две жизни. Почему это?

Ответ №1:

Есть несколько ошибок, которые приводят к тому, что ваш код не работает должным образом

  • Ваша переменная n совпадает со значением, которое вы получаете из введенного вами значения, лучше всего разделить их на разные значения, чтобы было легче избежать трудно обнаруживаемых ошибок
  • У вас должно быть условие, которое проверяет, является ли n>= max_guesses.

Ответ №2:

Добро пожаловать в сообщество, мы стараемся обсуждать проблемы здесь, а не искать целостное решение.

Я предлагаю вам сначала изучить самые основы программирования, такие как принятие решений, потоки управления (то есть операторы if и циклы). Кроме того, попробуйте повторить вопрос несколько раз с разными логиками и входными данными во время выполнения. это даст вам лучшее понимание логического анализа.

Вот один из способов, которым вы могли бы добавить логику.

 #Maximum allowed guesses
max_guesses = 3

def func1():
    
    #Input string 'left' or 'right'
    in_str = input("You are in the Lost Forestn****************n****************n :)n****************n****************nGo left or right? ")
    
    #Number of attempts made
    n = 1
    
    if in_str.lower() == "left":
        print("You're out of lost forest")
    
    while in_str.lower() == "right":
        in_str = input("You are in the Lost Forestn****************n******       ***n  :(n****************n****************nGo left or right? ")
        n  = 1
        if in_str.lower() == "left":
            print("You're out of lost forest")
            break
        if n >= max_guesses:
            print("Game over!!!")
            break
    
    print("Total attempts made by user: ",n)
    
func1()

  

Ответ №3:

Я попытался исправить ваш код, однако мне пришлось удалить цикл for и изменить имена переменных. Надеюсь, это поможет.

 n = 1
max_guesses = 3
a = input("You are in the Lost Forestn****************n****************n :)n****************n****************nGo left or right? ")

if a.lower() == "left":
    print("You're out of lost forest")
while a.lower() == "right":
    if n == 3:
        print("Game over! You ran out of your lives")
        break
    else:
        a = input("You are in the Lost Forestn****************n******       ***n  :(n****************n****************nGo left or right? ")
        n  = 1