如何使用input().split()批量输入并分别验证4个数据项?
用单次输入实现多数据项的分别验证
需求说明
需要通过input().split()一次性输入4个连续数据项,并分别验证每个项的规则:
- 第一项(姓名):1-20位纯字母,不区分大小写
- 第二项(身份编号):10位十进制数字
- 第三项(入学年份):1300到1500之间的整数
- 第四项(领域):1-20位纯小写字母
此前已通过4个独立input()实现验证,现在需要改为单次输入完成所有内容的提交与校验。
实现方案
通过循环获取整行输入,分割为4个字段后逐个验证规则,只要有一个字段不满足要求,就重新输入整行。既满足单次输入的需求,也能完成每个字段的独立校验。
以下是修改后的代码:
while True: # 获取单次输入并分割为4个部分 try: name, identical_num, enterence_year_str, field = input("请输入姓名、身份编号、入学年份、领域(用空格分隔):").split() except ValueError: print("错误:请输入4个用空格分隔的数据项!") continue # 验证姓名 name_valid = name.isalpha() and 1 <= len(name) <= 20 if not name_valid: print("错误:姓名必须是1-20位纯字母!") continue # 验证身份编号 id_valid = len(identical_num) == 10 and identical_num.isdecimal() if not id_valid: print("错误:身份编号必须是10位十进制数字!") continue # 验证入学年份 year_valid = False try: enterence_year = int(enterence_year_str) if 1300 <= enterence_year <= 1500: year_valid = True else: print("错误:入学年份必须在1300到1500之间!") except ValueError: print("错误:入学年份必须是整数!") if not year_valid: continue # 验证领域 field_valid = field.islower() and field.isalpha() and 1 <= len(field) <= 20 if not field_valid: print("错误:领域必须是1-20位纯小写字母!") continue # 所有验证通过,统一姓名格式并退出循环 name = name.lower() print("所有输入验证通过!") break # 后续可直接使用验证后的变量 print(f"姓名:{name},身份编号:{identical_num},入学年份:{enterence_year},领域:{field}")
代码说明
- 外层循环控制输入流程,直到所有字段校验通过才终止
- 先尝试分割输入,若分割后不是4个元素,直接提示错误并重新输入
- 对每个字段依次校验,某字段不满足规则时,打印对应错误并重新发起输入
- 入学年份需先转为整数再验证范围,同时处理非整数输入的异常情况
- 最后将姓名转为小写,与原代码逻辑保持一致
内容的提问来源于stack exchange,提问作者TheArvin98
相关产品推荐
相关产品推荐

