Пока цикл не выполняется

В этом коде пользователь должен угадать случайно выбранное компьютером число от 0 до 100. Проблема в том, что цикл while вообще не выполняется. Все работало, пока я не поместил этот блок кода в цикл while, чтобы он повторялся до тех пор, пока пользователь не угадает число или не закончатся попытки. Как заставить цикл while работать? Пожалуйста, я новичок в питоне.

import random
def guessing_game():
    print('''Welcome to the Number Guessing Game!
I'm thinking of a number between 1 and 100.''')

    select_level = input("Choose a difficulty. Type 'easy' or 'hard': easy: ")
    if select_level == "easy":
        attempt_left = 10
        print("You have 10 attempts remaining to guess the number.")
    elif select_level == "hard":
        attempt_left = 5
        print("You have 5 attempts remaining to guess the number.")
    computer_choice = random.randint(0,100)
    #print(f"Pssst, the correct answer is {computer_choice}")

    number_guessed = False
    while number_guessed:
        user_choice = int(input("Please enter a number between 0 and 100: "))
        if computer_choice == user_choice:
            number_guessed = True
            print(f"You got it! The answer was {computer_choice}")
        else:
            attempt_left -= 1
            if user_choice > computer_choice:
                print(f"That is too high!\nGuess again.\nYou have {attempt_left} attempts remaining to guess the number.")
            else:
                print(f"That is too low!\nGuess again.\nYou have {attempt_left} attempts remaining to guess the number.")
            if attempt_left == 0:
                number_guessed = True
                print("You've run out of guesses, you lose.")
guessing_game()
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
38
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это должно работать:

import random
def guessing_game():
    print('''Welcome to the Number Guessing Game!
I'm thinking of a number between 1 and 100.''')

    select_level = input("Choose a difficulty. Type 'easy' or 'hard': easy: ")
    if select_level == "easy":
        attempt_left = 10
        print("You have 10 attempts remaining to guess the number.")
    elif select_level == "hard":
        attempt_left = 5
        print("You have 5 attempts remaining to guess the number.")
    computer_choice = random.randint(0,100)
    #print(f"Pssst, the correct answer is {computer_choice}")

    number_guessed = False
    while number_guessed == False:
        user_choice = int(input("Please enter a number between 0 and 100: "))
        if computer_choice == user_choice:
            number_guessed = True
            print(f"You got it! The answer was {computer_choice}")
        else:
            attempt_left -= 1
            if user_choice > computer_choice:
                print(f"That is too high!\nGuess again.\nYou have {attempt_left} attempts remaining to guess the number.")
            else:
                print(f"That is too low!\nGuess again.\nYou have {attempt_left} attempts remaining to guess the number.")
            if attempt_left == 0:
                number_guessed = True
                print("You've run out of guesses, you lose.")
guessing_game()

Ошибка с вашим кодом заключалась в том, что когда вы используете цикл while, такой как while somevariable и somevariable равно False, цикл while не будет выполняться. Вы также можете просто попробовать while not number_guessed

not number_guessed будет намного лучше, чем number_guessed == False.
Blckknght 19.03.2022 00:48

numbers_guessed является ложным, и цикл while должен быть истинным для запуска. Поэтому измените цикл while или переменную.

Код:

import random
def guessing_game():
    print('''Welcome to the Number Guessing Game!
I'm thinking of a number between 1 and 100.''')

    select_level = input("Choose a difficulty. Type 'easy' or 'hard': easy: ")
    if select_level == "easy":
        attempt_left = 10
        print("You have 10 attempts remaining to guess the number.")
    elif select_level == "hard":
        attempt_left = 5
        print("You have 5 attempts remaining to guess the number.")
    computer_choice = random.randint(0,100)
    #print(f"Pssst, the correct answer is {computer_choice}")

    number_guessed = False
    while not number_guessed:
        user_choice = int(input("Please enter a number between 0 and 100: "))
        if computer_choice == user_choice:
            number_guessed = True
            print(f"You got it! The answer was {computer_choice}")
        else:
            attempt_left -= 1
            if user_choice > computer_choice:
                print(f"That is too high!\nGuess again.\nYou have {attempt_left} attempts remaining to guess the number.")
            else:
                print(f"That is too low!\nGuess again.\nYou have {attempt_left} attempts remaining to guess the number.")
            if attempt_left == 0:
                number_guessed = True
                print("You've run out of guesses, you lose.")
guessing_game()
!number_guessed - это не то, как вы пишете логическое отрицание в Python (это SyntaxError). Вы хотите not number_guessed.
Blckknght 19.03.2022 00:49

Спасибо @Blckknght. Я больше привык к похожему синтаксису скрипта GD. я изменю это

Blue Robin 19.03.2022 00:50
Ответ принят как подходящий

Вы определяете number_guessed как False, поэтому цикл вообще не выполняется. Попробуйте while not number_guessed.

в то время как not number_guessed действительно решил проблему, но он запутался в использовании флагов с циклом while. Означает ли это, что флаг всегда должен быть установлен как True? Цикл while должен продолжать работать до тех пор, пока number_guessed не станет True (пользователь получил правильное число, поэтому игра должна остановиться)

Sethoo 19.03.2022 00:56

Вы всегда хотите запустить цикл с условием True, и какое-то событие внутри цикла должно установить его в False. Если у вас нет этого, вы будете зацикливаться навсегда!

Marc de la Barrera i Bardalet 19.03.2022 01:03

в то время как not number_guessed действительно решил проблему, но он запутался в использовании флагов с циклом while. Означает ли это, что флаг всегда должен быть установлен как True? Цикл while должен продолжать работать до тех пор, пока number_guessed не станет True (пользователь получил правильный номер, поэтому игра должна остановиться). Я установил number_guessed как False ... поэтому, если я затем напишу while не number_guessed, я ожидал, что флаг не будет установлен как True. И если True, то это означает, что пользователь правильно угадал число, поэтому игра должна закончиться, что не так. Почему я в замешательстве, а?

Sethoo 19.03.2022 01:06

@Sethoo: переменная флага может работать в любом случае. состояние (который может быть либо просто флагом, либо выражением вроде not flag) должен быть True, если цикл должен продолжать работать (включая запуск в самый первый раз). Вы можете называть свои переменные как хотите, стоимость выражения not тривиальна (по сравнению с другими вещами, такими как ввод-вывод).

Blckknght 19.03.2022 02:10

Другие вопросы по теме