Есть пара ошибок в python с операторами while и elif

from random import randint

play = "yes"
while play == "yes":
    choice = int(input("Would you like to play yourself(1) or let machine(2) play? press '1' or '2': "))

    if choice == 1:
        print("You chose to play yourself")
        num = randint(1,9999)
        counter = 0
        while True:
            num_guess = int(input("Guess the number: "))
            if num_guess == 0:
                print("Player has left the game")
                break
            else:
                if num_guess > num:
                    print("Your guess is too high")
                elif num_guess < num:
                    print("Your guess is too low")
                elif num_guess == num:
                    print("Yay,you found it")
                    print("It took you " + str(counter) + " tries to guess the number")
                    break
            counter += 1

    elif choice == 2:
        print("You chose to let the machine play")
        your_num = int(input("Enter your number: "))
        lowest = 1
        highest = 9999
        counter = 0
        machine_guess = randint(1,9999)
        if your_num == 0:
            you_sure = input("Are you sure you want to leave the game? yes or no: ")
            if you_sure == "yes":
                print("Player left the game")
                break
        else:   
            while True:
                print("My guess is ",machine_guess) 
                is_it_right = input("Is it too small(<) or too big(>) or machine found(=) the number?: ")
                if is_it_right == ">":
                    if machine_guess > your_num:
                        highest = machine_guess
                        counter += 1
                    else:
                        print("!!!Don't cheat!!!")
                        your_number = input("What was your number?: ")
                        print(str(machine_guess) +" < " + str(your_number) + ",so you should have written '<' instead of what you wrote.Continue ")
                elif is_it_right == "<":
                    if machine_guess < your_num:
                        lowest = machine_guess + 1
                        counter += 1 
                    else:
                        print("!!!Don't Cheat!!!")
                        your_number = input("What was your number?: ")
                        print(str(machine_guess) +" > " + str(your_number) + ",so you should have written '>' instead of what you wrote.Continue ")
                elif is_it_right == " = ": 
                    if machine_guess == your_num:
                        if your_num == machine_guess:
                            counter += 1
                            print("Yayy,I found it")
                            print("It took me " + str(counter) + " tries to guess the number")
                        else:
                            print("You cheated and changed the number during the game.Please play fairly")
                            your_number = input("What was your number?: ")
                            print(str(machine_guess) +" = " + str(your_number) + ",so you should have written '=' instead of what you wrote ")
                        break
                elif is_it_right == 0:
                    you_sure = input("Are you sure you want to leave the game? yes or no: ")
                    if you_sure == "yes":
                        print("Player left the game")
                        break
                machine_guess = (lowest+highest)//2

    elif choice == 0:
        you_sure = input("Are you sure you want to leave the game? yes or no: ")
        if you_sure == "yes":
            print("Player has left the game")
            break

    request = input("Do you want to play again? Answer with 'yes' or 'no': ")
    if request == "no":
        print("You quitted the game")
        break
    elif request == 0:
        you_sure = input("Are you sure you want to leave the game? yes or no: ")
        if you_sure == "yes":
            print("Player left the game")
            break
        

Это мой код для игры "угадай мой номер", здесь самые сложные - это то, что я пытаюсь сделать так, чтобы программа не позволяла пользователю обманывать (это университетская задача, срок выполнения 3 часа) Таким образом, выбор 1 — это когда пользователь решает сыграть в игру «угадай мой номер», а второй выбор — когда компьютер играет в игру. Проблема, с которой я столкнулся:

  1. Я не могу заставить код заставить пользователя вводить число в диапазоне (1,9999), а ТОГДА продолжить процесс

  2. Как видите, у меня много "if ... == 0" -->. В задаче сказано, что всякий раз, когда (любой из входов) пользователь вводит 0, игра должна останавливаться. Другие работают хорошо, но тот, что в вариант 2 первый если не работает

Если у кого-то есть решение для этого, пожалуйста, помогите, я был бы признателен

В чем именно проблема у вас с # 2? Какую ошибку вы получаете?

Jtradfor 11.12.2020 20:36

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

Narmin 11.12.2020 20:52
Почему в 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
2
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Всякий раз, когда вы хотите задать вопрос несколько раз, пока не будет дан правильный ввод, используйте цикл while

print("You chose to let the machine play")
your_num = -1
while your_num < 0 or your_num > 9999:
   your_num = int(input("Enter your number [0..9999]: "))

Большое спасибо за помощь с моей 1-й проблемой. Я хотел использовать диапазон там, но я думаю, что это не тот случай. Если у вас есть какие-либо идеи со 2-й проблемой, я был бы очень благодарен, потому что я сам не знаю, почему это там не работает

Narmin 11.12.2020 20:25

@stark Ваше решение первой проблемы кажется яснее моего. Я, вероятно, слишком много думал, чтобы поймать неправильные входные данные.

Cagri 11.12.2020 20:38

Вы говорите, что если вы введете 0, он не выйдет?

stark 11.12.2020 20:41

@stark да, он не выходит. Но все остальные работают, и я не могу понять, в чем проблема с этим. Когда я снова и снова пишу 0, он выводит «Моя догадка ...»

Narmin 11.12.2020 20:48

@Jtradfor нет, вы выбираете вариант 2, а затем вводите число. После того, как компьютер начинает угадывать, там, когда вы вводите 0, он не выходит

Narmin 11.12.2020 20:51

Неправильно, если. Это тот, который находится внутри двух петель, который не работает. break только выходит из внутреннего цикла. Также установите play='no', как предложил @Cagri.

stark 11.12.2020 20:51

@stark это все еще не останавливается, даже после того, как я напишу play = "no"

Narmin 11.12.2020 20:56

Замените is_it_right == 0 на is_it_right == '0'. Вы видите разницу?

stark 11.12.2020 21:21

1- Чтобы заставить пользователя ввести число в диапазоне (1,9999), у вас должно быть условие, например:

while True:
   try:
       num_guess= int(input("Enter your number in range 1-9999: "))
   except ValueError:
       print("That's not a number!")
   else:
       if 1 <= num_guess <= 9999:
           break
       else:
           print("Out of range. Try again")

Редактировать: я не понял, какой ввод вы хотите оставить в диапазоне 1-9999. Я дал ответ с num_guess, но вы можете использовать его и с your_num.

2- Добавьте строку play = "no" к условию, когда пользователь вводит 0:

 if your_num == 0:
            you_sure = input("Are you sure you want to leave the game? yes or no: ")
            if you_sure == "yes":
                print("Player left the game")
                play = "no"
                break

Break должен завершать цикл независимо от того, установлено ли для воспроизведения значение «нет», не так ли? Я думаю, проблема в том, что ему нужно использовать raw_input вместо ввода, чтобы условие выполнялось, когда пользователь вводит yes без кавычек. Но опять же, я, возможно, не совсем понимаю проблему для вопроса № 2.

Jtradfor 11.12.2020 20:44
input() — это обновленная версия Python3 для raw_input() из Python 2. Я не думаю, что проблема в этом.
Cagri 11.12.2020 20:49

да, перерыв должен закончиться, и он заканчивается в других. Но в том, который я упомянул, он не выходит, я не могу понять, почему

Narmin 11.12.2020 20:49

Да, я думаю перерыв должен быть, если закончился. Так что я не совсем понял, что вы подразумеваете под "не существует". Продолжает ли он выполнять следующие строки или снова входит в цикл while? Если дело повторяется, play = "no" должно сработать.

Cagri 11.12.2020 20:58

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