You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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()

关键修改说明

  1. 统一处理所有输入场景:将输入逻辑、错误处理、计数逻辑整合到主循环中,确保任何输入(有效/无效)都会被处理,且无效输入直接计入尝试次数
  2. 修复单次错误处理问题:用while True循环持续接收输入,直到用户猜对,彻底解决原代码仅能处理一次ValueError的问题
  3. 添加范围校验:新增1-100的输入范围检查,符合游戏规则,同时这类无效范围的输入也会被计入次数
  4. 对齐原代码计数逻辑:仅将非猜对的输入计入次数,和用户示例要求的“3次猜对”逻辑一致

内容的提问来源于stack exchange,提问作者elguero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:30:48