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

Python新手求助:多条件校验全部通过才执行else分支的实现问题

联系信息校验代码修改方案

原代码核心问题

  • 所有校验逻辑为独立if判断,即便前面已经触发错误,后续代码依然会执行,比如输入字段数量不足4项时,继续按索引取data_user的值会直接抛出索引越界异常
  • 末尾的else仅和最后一个if age>100判断绑定,只要年龄≤100就会执行正常打印,哪怕前面其他校验已经报错,完全不符合需求

修改思路

  1. 新增校验状态标记位,初始值为True,只要任意一条校验规则触发错误,就将标记位设为False
  2. 输入字段数量校验失败时直接终止后续取值逻辑,避免索引报错
  3. 所有校验逻辑执行完成后,仅当标记位为True(即全部校验通过)时,才执行正常信息打印

修改后完整代码

from datetime import datetime

data_user = input("请输入联系信息,按空格分隔(名字 姓氏 出生年份 10位手机号码):").split(" ")
# 初始化校验状态
is_valid = True

if len(data_user) != 4:
    print("错误:输入顺序错误、存在遗漏项或输入不合法")
    is_valid = False
else:
    first_name = data_user[0]
    last_name = data_user[1]
    phone_number = data_user[2]
    # 补充出生年份数字校验,避免非数字输入报错
    if not data_user[3].isnumeric():
        print("错误:出生年份必须为数字")
        is_valid = False
    else:
        birth = int(data_user[3])
        # 各项字段校验
        if first_name.isnumeric():
            print("错误:名字只能包含字母")
            is_valid = False
        if last_name.isnumeric():
            print("错误:姓氏只能包含字母")
            is_valid = False
        if len(phone_number) != 10:
            print("错误:手机号码必须为10位")
            is_valid = False
        if phone_number[0] != "0":
            print("错误:手机号码首位必须为0")
            is_valid = False
        if not phone_number.isnumeric():
            print("错误:手机号码必须为数字")
            is_valid = False
        age = datetime.now().year - birth
        if age < 18 or age > 100:
            print("错误:出生年份不符合要求")
            is_valid = False

# 仅全部校验通过时打印正常信息
if is_valid:
    print(f"姓名:{first_name} {last_name}\n电话:{phone_number}\n出生年份:{birth}")

改动说明

  • 补充了出生年份的数字校验,避免用户输入非数字年份时直接抛出类型转换异常
  • 嵌套了字段取值逻辑,只有输入字段数符合要求时才会继续后续校验,避免索引越界
  • 所有错误触发时都会将校验状态标记为无效,最终只有状态为有效时才会打印正常结果

内容的提问来源于stack exchange,提问作者Lior Ben ishai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:15:09