Как исправить мои условия цикла while в Python

Я создал игру, в которой есть секретное число, и ты угадываешь, потом угадывает компьютер. Секретный номер меняется каждый раунд. Чтобы выиграть, либо вы, либо компьютер должны набрать 2 балла.

Я не знаю, сколько раундов это займет, поэтому я зацикливаю игру 100 раз в цикле while с условием, что user_Score и computer_Score не равны 2,

Однако, когда я запускаю свой код, кажется, что он просто пропускает условие и повторяется 100 раз, и я не понимаю, почему.

while user_score != 2 or computer_score != 2:
    for _ in range(100):
        game()

Приведенный выше код - это та часть, о которой я говорю, она находится в нижней части моего кода.

import random

computer_score = 0
user_score = 0 
    
def game():
    global user_score
    global computer_score
   
    secret_number = random.randrange(10)
    while True:
        user_guess = input("Guess a number from 0 - 10:  ")
        if user_guess.isdigit():
            user_guess = int(user_guess)
            if 0 <= user_guess <= 10:
                break
            else:
                print("Enter a valid number from 0 - 10")
        else:
            print("Please enter a valid number from 0 - 10")
    computer_guess = random.randrange(10)
    
    if user_guess == secret_number:
        print("Hooray! You guessed correctly")
        user_score += 1
        print(f"Your score is {user_score}")
    else:
        print("Sorry wrong guess")
    print("Now Player 2's turn")
    
    if computer_guess == secret_number:
        print("Player 2 guessed the correct number!")
        computer_score += 1
        print(f"Player 2's score is {computer_score}")
    else:
        print("Player 2 guesed incorrectly")
    
    print( f" Your score: {user_score}" + "   " + f"Player 2 score: {computer_score}")
game() 
 
 
while user_score != 2 or computer_score != 2:
    for _ in range(100):
        game()

if user_score == 2:
    print(f"Hooray! You won with a score of {user_score} points")
    print(f"Player 2 got {computer_score} points")
elif computer_score == 2:
    print(f"Sorry, you lost. Your score is {user_score}, and Player 2 got {computer_score} points")
print( f" Your final score: {user_score}" + "   " + f"Player 2 final score: {computer_score}" )
       

Вы входите в цикл while, потому что ни user_score, ни computer_score не равны 2, а затем вы for 100 раз (несмотря ни на что).

BorrajaX 12.02.2023 19:33

Попробуйте использовать if внутри цикла for вместо while снаружи.

fuenfundachtzig 12.02.2023 19:34

И вы должны зацикливаться, пока user_score != 2 и computer_score != 2

Thierry Lathuille 12.02.2023 19:36
Почему в 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
3
81
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
while user_score != 2 or computer_score != 2:
    for _ in range(100):
        game()

Если игрок наберет два балла, это не остановит внутренний цикл for. Он зациклится на 100, потому что это то, что вы ему сказали.

Я не понимаю, зачем вообще нужен внутренний цикл. Разве недостаточно внешнего цикла while?

while user_score != 2 or computer_score != 2:
    game()

Кроме того, не хотели бы вы использовать здесь and вместо or? Как это написано, он остановится только в том случае, если оба результата равны 2. И если один из игроков наберет 3 балла, а другой игрок имеет счет 0 или 1, этот цикл никогда не завершится.

Привет, Джон, большое спасибо, я совершенно новичок в этом, и я все еще учусь, но то, что ты сказал, действительно помогло мне. Спасибо.

Aryan Singh 13.02.2023 02:43

Он всегда будет показывать одну и ту же ошибку. Потому что в начале игры, когда заканчивается 1-й раунд, цикл for начинает повторяться, и он будет продолжаться 100 раз. Лучший способ — удалить цикл for и просто запустить цикл while.

while user_score != 2 or computer_score != 2:
    game()

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