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

Python 如何让这个循环迭代回while关键字下缩进的行?,python,while-loop,Python,While Loop,我一直在尝试这段代码,除非我猜错了数字,否则一切都正常,然后它会回过头来询问骰子上有多少边,而不是让你猜另一个数字。我做错了什么 import random def guessDice(): try: numSides = int(input("\nHow many sides are on your dice? ")) print("\nYour dice is bei

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

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

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

随机导入
#Helper函数,用于验证用户输入是否为整数
def get_integer_输入(用户提示:str)->int:
尽管如此:
尝试:
返回int(输入(f“{user\u prompt}\n>”)
除值错误外:
打印(“输入无效!请输入整数!”)
def guessDice():
num\u sides=get\u integer\u输入(“骰子上有多少条边?”)
打印(“\n正在掷骰子…”)
骰子掷骰=随机的.randint(1,数量侧)
尽管如此:
user_guess=get_integer_input(f“从1到{num_sides}中选择一个数字”)
如果用户猜==骰子掷骰:
打印(“\n抓图!明白了!”)
打破
其他:
打印(“\n请重试,您猜错了号码!再试一次。”)
猜骰子
这添加了一个帮助函数,用于验证用户输入并修复代码中的一些问题,最突出的是,每次用户猜错时,您都会重新生成一个随机骰子卷,如果用户继续猜错,则可能会导致无限循环(即使六面骰子的结果是1-6,你也在滚动每一个猜测,这意味着完全有可能一直猜错)

try/except
既短又甜:它所要做的就是将用户输入转换为一个整数,如果失败,它会再次询问。如果成功,它会在
while
循环中中断,然后发生骰子猜测逻辑

我还将“pick a number”提示符更改为f字符串,这样就不需要强制转换和连接用户输入


最后,我将“dice”改为“die”,并将您的变量和函数转换为
snake\u case
,Python通常是用它编写的。

无法复制;对我来说很好。请注意,“dice”的单数是“die”此外,还有一个问题:每次用户猜测错误的值时,您都在滚动骰子。考虑到
try
块外没有循环,不确定它将如何循环回“多少边”部分……您需要两个while True循环(每个输入一个)。重申:一个
try/except
块应该做一件事。它只意味着尝试做一件可能失败的事情,然后将失败作为异常捕获。在
try/except
块中不应该包含其他逻辑。@TigerhawkT3怎么会这样?他们描述的错误是不可复制的,但他们的代码包含其他错误。这answer修复了OP代码中的错误,并使其按照他们期望的方式运行。如果问题无法重现,您可以投票以该理由结束问题。这回答了OP认为他们在问的问题。如果您愿意,可以随意标记它,但我相信此答案将有助于OP。他们正在尝试的代码通过用他们发布的代码替换它,可以修复调试问题。事实上,更仔细地看一下你的答案,我发现除了做一些实质性的不同的事情(允许用户对每个目标进行多次猜测,以强制获胜)外,你的解决方案会丢失一些输入验证,因此如果用户进行非整数猜测,它会崩溃。