Python校验用户输入星期值合法性的自定义函数异常排查
实现目标
编写函数采集用户每周可用的星期信息,满足以下要求:
- 将用户输入的合法星期值存入列表,供后续逻辑调用
- 校验输入的星期值格式、取值有效性,非法输入时提示用户重新输入
- 兼容用户用空格、逗号分隔多个星期值的输入习惯
原代码逻辑缺陷
原有实现的校验逻辑无法按预期运行,核心问题如下:
- 计数逻辑错误:内层遍历合法星期列表时,只要当前遍历到的合法值和输入项不相等,就会把校验计数器重置为0,哪怕输入项已经匹配过前面的合法值,最终计数器结果完全不可信
- 未处理空值:用户输入连续多个空格、逗号前后带空格时,字符串拆分后会产生空字符串元素,会被误判为非法值
- 无去重逻辑:用户重复输入同一个星期值时,返回列表会出现重复项,影响后续使用
修正后可运行代码
# 合法星期值白名单 daysWeek = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] def daysInput(message): print("支持输入的合法星期缩写:", daysWeek) while True: # 预处理用户输入:统一首字母大写、替换逗号为空格、拆分后过滤空值 raw_content = input(message).strip().title() input_items = [item for item in raw_content.replace(",", " ").split(" ") if item] # 逐名校验输入项 is_valid = True for day in input_items: if day not in daysWeek: is_valid = False break if is_valid: # 去重并按周一到周日的固定顺序返回结果 return [d for d in daysWeek if d in input_items] print("输入包含非法内容,请重新输入") # 函数调用示例 if __name__ == "__main__": user_available_days = daysInput("请输入每周可用星期(支持空格/逗号分隔,示例:Mon,Wed Fri):") print("已记录的可用星期:", user_available_days)
代码特性说明
- 兼容多种输入格式:自动处理多空格、逗号+空格、纯逗号分隔的输入,过滤无意义空值
- 校验逻辑稳定:直接通过白名单判断输入合法性,不存在计数逻辑误差
- 返回结果规范:自动去重,且固定按照周一到周日的顺序排列,无需后续额外排序处理
- 逻辑简洁:移除了冗余的状态标记变量,代码可读性更高
内容的提问来源于stack exchange,提问作者CndRocker
相关产品推荐
相关产品推荐

