我一直在尝试这个代码,一切正常,除非我猜错了数字,然后它循环返回询问骰子上有多少面,而不是让你猜另一个数字。我做错了什么?
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()
答案 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 编写。