我如何让这个循环迭代回到 while 关键字下缩进的行?

时间:2021-02-14 04:18:33

标签: python while-loop

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

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()

1 个答案:

答案 0 :(得分:-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_case,通常使用 Python 编写。

相关问题