#python #isinstance #guess.js
#python #isinstance #guess.js
Вопрос:
Я хочу, чтобы эта игра с угадыванием чисел могла перехватывать все возможные исключения или ошибки, которые вводит пользователь. Я успешно предотвратил использование строк при угадывании числа, но я хочу, чтобы консоль отображала пользовательское сообщение при вводе числа с плавающей точкой, в котором говорится что-то вроде «Разрешены только целые числа от 1 до 20». Я понимаю, что мое исключение сработало бы для обнаружения такого рода ошибок, но в целях обучения я хочу специально обрабатывать, если пользователь вводит значение с плавающей точкой вместо int. Из того, что я смог найти в Интернете, функция isinstance(), похоже, была именно тем, что я искал. Я попытался применить его таким образом, который казался логичным, но когда я пытаюсь запустить код и ввести значение с плавающей запятой при угадывании случайного числа, оно просто возвращается к моему обобщенному исключению. Я новичок в Python, поэтому, если кто-нибудь достаточно любезен, чтобы помочь, я также был бы признателен за любую критику моего кода. Я попытался сделать это без особой помощи из Интернета. Хотя это работает по большей части, я не могу избавиться от ощущения, что я неэффективен. Я самоучка, если это поможет моему делу, лол. Вот мой исходный код, спасибо:
import random
import sys
def getRandNum():
num = random.randint(1,20)
return num
def getGuess(stored_num, name, gameOn = True):
while True:
try:
user_answer = int(input("Hello " name " I'm thinking of a number between 1-20. Can you guess what number I'm thinking of"))
while gameOn:
if user_answer >= 21 or user_answer <=0:
print("That is not a number between 1-20. Try again.")
user_answer = int(input())
elif isinstance(user_answer, int) != True:
print("Only enter whole numbers. No decimals u cheater!")
user_answer = int(input())
elif user_answer > stored_num:
print("That guess is too high. Try again " name " !")
user_answer = int(input())
elif user_answer < stored_num:
print("That guess is too low. Try again " name " !")
user_answer = int(input())
elif user_answer == stored_num:
print("You are correct! You win " name " !")
break
except ValueError:
print("That was not a number, try again")
def startGame():
print("Whats Your name partner?")
name = input()
stored_num = getRandNum()
getGuess(stored_num, name)
def startProgram():
startGame()
startProgram()
while True:
answer = input("Would you like to play again? Type Y to continue.")
if answer.lower() == "y":
startProgram()
else:
break
quit()
Комментарии:
1.
user_answer = int(...)
вызовет ошибку, если вы введете значение с плавающей точкой.
Ответ №1:
Единственное, что должно быть в try
инструкции, — это код, который проверяет, можно ли преобразовать входные данные в int
. Вы можете начать с функции, единственной задачей которой является запрашивать у пользователя число, пока int(response)
оно действительно не будет выполнено без исключения.
def get_guess():
while True:
response = input("> ")
try:
return int(response)
except ValueError:
print("That was not a number, try again")
Как только у вас есть допустимый int
, вы можете выполнить проверку диапазона, чтобы увидеть, выходит ли он за пределы, слишком низкий, слишком высокий или равен.
# The former getGuess
def play_game(stored_num, name):
print(f"Hello {name}, I'm thinking of a number between 1-20.")
print("Can you guess what number I'm thinking of?")
while True:
user_answer = get_guess()
if user_answer >= 21 or user_answer <=0:
print("That is not a number between 1-20. Try again.")
elif user_answer > stored_num:
print(f"That guess is too high. Try again {name}!")
elif user_answer < stored_num:
print(f"That guess is too low. Try again {name}!")
else: # Equality is the only possibility left
print("You are correct! You win {name}!")
break