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

Python中如何在输入不在指定列表时重新请求用户输入?

解决方法

问题根源

你当前的代码仅在输入无效时请求一次新输入,但未将新输入赋值给变量d,也没有循环校验机制,导致无效输入后程序仍会执行后续逻辑,无法实现重复请求的需求。

修正后的完整代码

duraciones = []  # 假设已预先定义该列表
valid_values = [1, 2, 4, 8, 16]
# 初始提示文本
input_prompt = """¿Cuál quieres que sea el valor máximo de duración?
Ten en cuenta que el valor mínimo está definido y es la semicorchea.

Semicorchea = 16
Corchea = 8
Negra = 4
Blanca = 2
Redonda = 1
"""

# 循环获取有效输入
while True:
    try:
        d = int(input(input_prompt))
        if d in valid_values:
            break  # 输入有效,终止循环
        # 输入不在有效列表时提示错误
        print("\nValor no válido. Debe seleccionar uno de los siguientes valores:")
        print("Redonda = 1, Blanca = 2, Negra = 4, Corchea = 8, Semicorchea = 16\n")
    except ValueError:
        # 处理非整数输入的情况
        print("\nPor favor, ingresa un número entero válido.\n")

# 用字典映射替代冗余的if判断,简化逻辑
value_mapping = {
    16: [0.25],
    8: [0.5],
    4: [0.5, 1],
    2: [0.5, 1, 2],
    1: [0.5, 1, 2, 4]
}
duraciones.extend(value_mapping[d])

核心改进说明

  • 循环校验机制:通过while True实现持续请求,直到输入有效才跳出循环
  • 输入赋值:每次输入都重新赋值给d,确保后续逻辑使用的是最新输入值
  • 异常处理:捕获ValueError,避免用户输入非整数时程序崩溃
  • 代码简化:用字典映射替代多个if判断,提升代码可读性和维护性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:10:27