我该如何在随机猜数字游戏中正确使用isinstance或需要其他功能?

问题描述

我希望这个猜数字游戏能够捕获用户输入的所有可能的异常或错误。我已经成功地阻止了在猜测数字时使用字符串的方法,但是我希望控制台在输入浮点数时显示一条自定义消息,并说“仅允许1-20之间的整数”。我意识到我的异常可以捕获这种错误,但是出于学习目的,我想专门处理用户输入的是float而不是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()

解决方法

try语句中唯一需要的是检查输入是否可以转换为int的代码。您可以从一个函数开始,该函数的 only 任务是提示用户输入数字,直到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