0

我一直在尝试这段代码,除非我猜错了数字,否则一切正常,然后它会循环回来询问骰子上有多少面,而不是让你猜另一个数字。我究竟做错了什么?

import random
          
def guessDice():
    
        try:
            numSides = int(input("\nHow many sides are on your dice? "))
            print("\nYour dice is being rolled...")
            while True:
                numGuess = int(input("\nPick a number from 1 to " + str(numSides) + " "))
                randNum = random.randint(1, numSides)
                if numGuess == randNum:
                    print("\nCongrats! You got it!")
                    break
                else:
                    print("\nSorry, you guessed the wrong number! Try again.")

        except ValueError:
            print("\nYou typed in the wrong value. This time, type an integer!") 
guessDice()
4

1 回答 1

-1

所以try/except块应该尽可能简洁。考虑重写:

import random


# Helper function which verifies that the user input is an integer
def get_integer_input(user_prompt: str) -> int:
    while True:
        try:
            return int(input(f"{user_prompt}\n > "))
        except ValueError:
            print("Invalid input! Please enter an integer!")


def guessDice():
    num_sides = get_integer_input("How many sides are on your dice?")
    print("\nYour dice is being rolled...")
    die_roll = random.randint(1, num_sides)

    while True:
        user_guess = get_integer_input(f"Pick a number from 1 to {num_sides}")
        if user_guess == die_roll:
            print("\nCongrats! You got it!")
            break
        else:
            print("\nSorry, you guessed the wrong number! Try again.")


guessDice()

这添加了一个辅助函数来验证用户输入并修复您的代码的一些问题,最突出的事实是,每次用户猜错时您都会重新生成随机骰子,如果用户继续猜错(即使您在 6 面骰子中选择 1-6,您也会重新掷骰子,这意味着完全有可能继续猜错)。

简短而try/except甜蜜:它所做的只是将用户输入转换为整数,如果失败,它会再次询问。如果成功,它会从while循环中中断,然后发生猜骰子逻辑。

我还将“选择一个数字”提示更改为 f 字符串,这样您就不需要转换和连接用户输入。

最后,我将“dice”更改为“die”,并将您的变量和函数转换为snake_casePython 常用的编写方式。

于 2021-02-14T04:36:53.330 回答