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,9999), а ТОГДА продолжить процесс
Как видите, у меня много "if ... == 0" -->. В задаче сказано, что всякий раз, когда (любой из входов) пользователь вводит 0, игра должна останавливаться. Другие работают хорошо, но тот, что в вариант 2 первый если не работает
Если у кого-то есть решение для этого, пожалуйста, помогите, я был бы признателен
@Jtradfor после того, как я выберу вариант 2, затем продолжу писать свой номер, и после того, как компьютер начнет угадывать мой номер, я пишу 0, и он не выходит. Я не могу понять, почему, потому что он отлично работает в других ситуациях
Всякий раз, когда вы хотите задать вопрос несколько раз, пока не будет дан правильный ввод, используйте цикл 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-й проблемой, я был бы очень благодарен, потому что я сам не знаю, почему это там не работает
@stark Ваше решение первой проблемы кажется яснее моего. Я, вероятно, слишком много думал, чтобы поймать неправильные входные данные.
Вы говорите, что если вы введете 0, он не выйдет?
@stark да, он не выходит. Но все остальные работают, и я не могу понять, в чем проблема с этим. Когда я снова и снова пишу 0, он выводит «Моя догадка ...»
@Jtradfor нет, вы выбираете вариант 2, а затем вводите число. После того, как компьютер начинает угадывать, там, когда вы вводите 0, он не выходит
Неправильно, если. Это тот, который находится внутри двух петель, который не работает. break только выходит из внутреннего цикла. Также установите play='no', как предложил @Cagri.
@stark это все еще не останавливается, даже после того, как я напишу play = "no"
Замените is_it_right == 0
на is_it_right == '0'
. Вы видите разницу?
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.
input()
— это обновленная версия Python3 для raw_input()
из Python 2. Я не думаю, что проблема в этом.
да, перерыв должен закончиться, и он заканчивается в других. Но в том, который я упомянул, он не выходит, я не могу понять, почему
Да, я думаю перерыв должен быть, если закончился. Так что я не совсем понял, что вы подразумеваете под "не существует". Продолжает ли он выполнять следующие строки или снова входит в цикл while? Если дело повторяется, play = "no"
должно сработать.
В чем именно проблема у вас с # 2? Какую ошибку вы получаете?