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

Python中如何捕获无效输入并存储至列表,实现自定义提示功能?

解决猜数字游戏中的无效输入记录与提示问题

嘿,我明白你的需求了!你想在猜数字游戏里把用户输入的非数字内容存起来,并且显示“绝对不是[输入文本]”的提示,但当前代码的逻辑有几个小问题导致实现不了。我来帮你修正一下:

问题出在哪?

  1. 你的try-except块放在了外层循环,当用户输入无效内容时,guessedNumber还是上一次的有效数字,所以你append到列表里的不是用户这次输入的无效文本。
  2. 那个elif type(guessedNumber) is not int的判断永远不会触发——因为如果输入能转成整数,guessedNumber就是int类型;如果转失败,代码直接进入except块,根本不会走到这个判断里。

修正后的完整代码

import os
import pyfiglet

# 初始化必要变量(可根据需求调整,比如把realNumber改成随机生成)
realNumber = 42
tries = 0
guessedNumbers = []

def checkTries():
    # 这里可以添加尝试次数限制的逻辑,比如超过10次提示用户
    pass

def playAgain():
    # 这里可以添加询问是否再玩一次的逻辑
    pass

while True:
    os.system("clear")
    print(pyfiglet.figlet_format("Guess the Number!", font="big"))
    print("The number is:")
    
    # 遍历所有历史尝试,区分有效/无效输入显示提示
    for x in guessedNumbers:
        if isinstance(x, int):
            if x < realNumber:
                print(f"Higher than {x}")
            elif x > realNumber:
                print(f"Lower than {x}")
        else:
            # 非整数即为无效输入,显示对应提示
            print(f"Definitely not {x}")
    
    # 内层处理输入,捕获无效输入
    try:
        user_input = input("The number is... ")
        guessedNumber = int(user_input)
        tries += 1
        checkTries()
        guessedNumbers.append(guessedNumber)
        
        # 判断是否猜对
        if guessedNumber == realNumber:
            os.system("clear")
            print(pyfiglet.figlet_format("You won!", font="big"))
            if tries == 1:
                print("You got it in the first try! What a lucky person!")
            else:
                print(f"Way to go! You got it in {tries} tries!")
            break
    except ValueError:
        # 捕获无效输入,记录原始字符串并提示
        tries += 1
        checkTries()
        guessedNumbers.append(user_input)
        print(f"\nDefinitely not {user_input}! Try again.")
        input("Press Enter to continue...")

关键修改点解释

  1. 内层try-except处理输入:这样能拿到用户输入的原始字符串user_input,不管转换是否成功都能准确记录。
  2. 区分存储类型:有效输入转成int存入列表,无效输入直接存原始字符串,方便后续判断显示。
  3. 前置提示逻辑:把历史尝试的提示显示放在每次输入前,用户能立刻看到上一次输入的反馈,包括无效内容的提示。
  4. 即时反馈无效输入:捕获到无效输入时,直接给出提示,让用户明确知道输入不合法。

现在测试一下,比如输入“abc”,代码会把“abc”存到guessedNumbers里,并且显示“Definitely not abc”,完全符合你的需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 09:52:37