如何在Try-Except结构中实现猜数字游戏的持续输入
猜数字游戏代码优化问题
我正在开发一款猜数字游戏,需求如下:
- 用户输入1到100之间的整数,猜测秘密数字26
- 统计用户猜对所用的尝试次数(所有非猜对的输入,包括字符串、浮点数这类无效值,都要计入次数)
- 用try-except实现可持续输入直到猜对,但当前代码仅能处理一次ValueError,无法满足需求
示例场景:输入"a"→4.20→"hello"→26,最终应显示“You guessed it! It took you 3 guesses.”
原代码如下:
def guess(n): secret_number = 26 if n < secret_number: return print("Too low!") elif n > secret_number: return print("Too high!") def try_exp(): try: n = int(input("What is your guess? ")) return n except ValueError: n = int(input("Bad input! Try again: ")) return n def counter(): print("Guess the secret number! Hint: it's an integer between 1 and 100... ") n = try_exp() i = 0 while n != 26: guess(n) i += 1 n = try_exp() print(f"You guessed it! It took you {i} guesses.") counter()
修改后的代码
def counter(): secret_number = 26 print("Guess the secret number! Hint: it's an integer between 1 and 100... ") attempt_count = 0 while True: user_input = input("What is your guess? ") try: # 尝试将输入转为整数 n = int(user_input) # 检查输入是否在1-100范围内 if not (1 <= n <= 100): print("请输入1到100之间的整数!") attempt_count += 1 continue # 判断是否猜对 if n == secret_number: print(f"You guessed it! It took you {attempt_count} guesses.") break # 未猜对则计数加1,并提示高低 attempt_count += 1 if n < secret_number: print("Too low!") else: print("Too high!") except ValueError: # 处理无效输入(字符串、浮点数等) print("无效输入!请输入整数。") attempt_count += 1 counter()
关键修改说明
- 统一处理所有输入场景:将输入逻辑、错误处理、计数逻辑整合到主循环中,确保任何输入(有效/无效)都会被处理,且无效输入直接计入尝试次数
- 修复单次错误处理问题:用
while True循环持续接收输入,直到用户猜对,彻底解决原代码仅能处理一次ValueError的问题 - 添加范围校验:新增1-100的输入范围检查,符合游戏规则,同时这类无效范围的输入也会被计入次数
- 对齐原代码计数逻辑:仅将非猜对的输入计入次数,和用户示例要求的“3次猜对”逻辑一致
内容的提问来源于stack exchange,提问作者elguero
相关产品推荐
相关产品推荐

