Python如何先校验字符串输入再执行日期输入验证
问题说明
- 需要实现员工信息采集程序,采集字段包含:姓名、学历、入职起始日期、离职日期
- 流程要求:
- 第一步提示用户输入姓名、学历,输入包含数字、格式不符合要求时直接提示重输,校验通过前不能进入下一步
- 第二步提示用户输入两个日期,校验日期必须符合
YYYY-MM-DD格式
- 原有代码存在字符串校验逻辑错误、流程控制失效、异常处理冗余的问题,无法正常运行
修正后完整代码
import datetime def validate_date(date_text): try: datetime.datetime.strptime(date_text.strip(), '%Y-%m-%d') return True except ValueError: print("Incorrect date format, please enter date in YYYY-MM-DD ONLY") return False def validate_name_degree(input_list): # 校验拆分后字段数量 if len(input_list) != 2: print("Input format error, please separate name and degree with comma") return False name, degree = input_list[0].strip(), input_list[1].strip() # 校验非空 if not name or not degree: print("Name and degree cannot be empty, please re-enter") return False # 校验不包含数字 for content in [name, degree]: if any(char.isdigit() for char in content): print("Enter name & degree in string only, cannot contain numbers") return False return True # 第一阶段:姓名学历校验循环 while True: raw_input = input("Enter name & degree separated by (,):") name_with_deg = [item.strip() for item in raw_input.split(",")] if validate_name_degree(name_with_deg): name, degree = name_with_deg break # 第一阶段校验通过后才会执行到第二阶段 while True: raw_date_input = input("Enter employee start and termination date separated by (,) in YYYY-MM-DD format only: ") date_list = [item.strip() for item in raw_date_input.split(",")] if len(date_list) != 2: print("Input format error, please separate two dates with comma") continue start_date, end_date = date_list if validate_date(start_date) and validate_date(end_date): break # 输出采集结果 print("\nCollected information:") print(f"Name: {name}, Degree: {degree}") print(f"Start date: {start_date}, Termination date: {end_date}")
核心修改说明
- 流程控制:使用两个独立的
while True无限循环,只有第一个姓名学历校验通过触发break后,才会执行第二个日期输入的循环代码,完全实现前置校验通过再进入下一环节的要求 - 字符串校验修复:不再对拆分后的列表直接调用字符串方法,先校验输入拆分后的字段数量,再逐个检查姓名、学历是否为空、是否包含数字,从根源避免类型错误
- 冗余代码清理:删除抛出异常后无法执行的
return语句,校验不通过时直接打印提示返回False,让循环继续等待用户输入,不会直接崩溃 - 兼容处理:对用户输入的内容做前后空格去除,避免误输入空格导致的校验失败
内容的提问来源于stack exchange,提问作者biggboss2019
相关产品推荐
相关产品推荐

