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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:07:20