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
相关产品推荐
相关产品推荐

