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

Python递归问卷验证问题:非法输入时重复当前问题而非重启

修复问卷函数:非法输入时重复当前问题而非从头开始

你的问题出在非法输入时的递归调用——你直接重新启动了整个问卷函数,导致流程回到第一个问题。要实现重复当前问题的需求,只需要给每个问题的输入逻辑套一个循环,直到用户输入合法的yes/no为止。

修改后的代码

def questionnaire(df, questions=questions):
    # 直接遍历问题字典的键值对,比通过索引取值更直观高效
    for q_text, (filter_sections, target_ans) in questions.items():
        print(q_text)
        
        while True:  # 循环请求输入,直到得到合法值
            ans = input().strip().lower()
            if ans in ('yes', 'no'):
                break  # 输入合法,退出循环处理后续逻辑
            print("Please type yes or no.")
        
        # 执行数据集过滤逻辑
        if ans == 'yes' and target_ans == "Yes":
            df = df[~df.Section.isin(filter_sections)]
        elif ans == 'no' and target_ans == "No":
            df = df[~df.Section.isin(filter_sections)]
    
    return df

关键改动说明

  • 替换递归为局部循环:用while True包裹单个问题的输入逻辑,非法输入时只会重复当前问题的请求,不会重启整个问卷流程。
  • 优化字典遍历方式:通过items()直接遍历问题的文本和对应配置,省去了原代码中反复调用list(questions.keys())[i]的冗余操作,代码可读性更强。
  • 增强输入鲁棒性:添加strip()处理用户输入,避免因输入前后空格(比如yes)导致的识别失败。
  • 简化过滤语法:用Pandas惯用的~代替== False,逻辑表达更简洁。

这样修改后,用户输入非法内容时会收到提示,并重复当前问题,直到输入yes或no才会继续下一个问题,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:25:36