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

如何用rich.Prompt实现浮点数对或指定字母的用户输入?

用rich.Prompt混合处理命令输入与浮点数对

你可以通过自定义校验函数结合rich.Prompt的validate参数来实现这种混合输入的需求。核心思路是让校验函数同时处理两种输入场景:匹配指定命令(如Q),或者解析出合法的浮点数对,不符合要求时抛出明确的错误提示。

完整代码示例

from rich.prompt import Prompt, ValidationError

def validate_input(input_str: str) -> str:
    # 先处理命令类输入(比如Q退出)
    command = input_str.strip().upper()
    if command in ["Q"]:
        return command
    
    # 处理浮点数对输入
    parts = input_str.strip().split()
    if len(parts) != 2:
        raise ValidationError("请输入两个用空格分隔的浮点数,或输入Q退出")
    
    try:
        # 尝试转换为浮点数,确认合法性
        float(parts[0])
        float(parts[1])
        return input_str
    except ValueError:
        raise ValidationError("输入的不是合法浮点数,请重新输入,或输入Q退出")

# 获取用户输入
user_input = Prompt.prompt(
    "请输入一对浮点数(空格分隔),或输入Q退出",
    validate=validate_input,
    show_choices=False  # 如果需要显示命令选项,可设为True并添加choices=["Q"]参数
)

# 处理返回结果
if user_input.upper() == "Q":
    print("退出程序")
else:
    num1, num2 = map(float, user_input.split())
    print(f"你输入的浮点数对是:{num1}, {num2}")

关键细节说明

  • 自定义校验逻辑:validate_input优先检查输入是否为指定命令,符合则直接返回;否则验证输入是否为两个空格分隔的合法浮点数,不满足时抛出ValidationError,rich会自动将错误信息展示给用户,直到输入合法。
  • 命令扩展:如果需要新增命令(比如R重置),只需在命令判断的列表中添加对应字母即可,维护成本低。
  • 交互优化:可以通过choices=["Q"]和show_choices=True让Prompt显示可选命令,给用户更清晰的输入指引。
  • 类型分离:校验阶段只负责验证格式合法性,类型转换放在结果处理阶段,保持校验逻辑单一清晰。

这种方式既利用了rich.Prompt的美观交互,又能让输入校验逻辑更简洁易维护,比原生input的循环校验方案更优雅。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:00:02