3. 实现交互式提示输入

实现交互式提示输入 学习卡片

任务说明

本案例要求实现一个命令行交互程序:依次提示用户输入姓名和年龄,对输入进行格式验证(姓名非空且仅含中英文字符与空格,年龄为1\~120之间的整数),验证通过后输出包含姓名和年龄的问候语;验证失败则提示具体错误并重新询问该项,直到通过为止。

实现方案

使用Python标准库实现,不依赖第三方包。核心逻辑分为三个函数:get_name()负责循环读取并校验姓名,get_age()负责循环读取并校验年龄,main()负责调用前两者并输出最终问候语。校验规则通过正则表达式和数值范围判断完成。

交互流程与校验逻辑 主流程 提示输入姓名 正则 ^[\\u4e00-\\u9fa5 a-zA-Z ]+$ 通过? 不合法则重新输入 年龄校验 提示输入年龄 isdigit() 且 1 ≤ int ≤ 120 通过? 不合法则重新输入 输出 你好,{姓名}! 你今年 {年龄} 岁。 (姓名年龄均合法时)

完整代码

import re

def get_name():
    """循环提示输入姓名,直到格式合法(仅中英文字符与空格,且非空)。"""
    pattern = re.compile(r'^[\u4e00-\u9fa5a-zA-Z ]+$')
    while True:
        name = input("请输入姓名(仅限中英文字符与空格):").strip()
        if not name:
            print("错误:姓名不能为空。")
        elif not pattern.match(name):
            print("错误:姓名只能包含中英文字符与空格。")
        else:
            return name

def get_age():
    """循环提示输入年龄,直到为1~120之间的整数。"""
    while True:
        age_str = input("请输入年龄(1~120之间的整数):").strip()
        if not age_str.isdigit():
            print("错误:年龄必须是正整数。")
        else:
            age = int(age_str)
            if 1 <= age <= 120:
                return age
            else:
                print("错误:年龄必须在1到120之间。")

def main():
    name = get_name()
    age = get_age()
    print(f"你好,{name}!你今年 {age} 岁。")

if __name__ == "__main__":
    main()

运行与验证

运行方式:将上述代码保存为 interactive_input.py,在终端执行 python interactive_input.py。

验证方法:按以下顺序输入测试数据,观察程序行为:

  1. 姓名输入 123 → 应提示“姓名只能包含中英文字符与空格”,并重新询问;
  2. 姓名输入 张三 → 通过,进入年龄询问;
  3. 年龄输入 abc → 应提示“年龄必须是正整数”;
  4. 年龄输入 200 → 应提示“年龄必须在1到120之间”;
  5. 年龄输入 25 → 程序输出 你好,张三!你今年 25 岁。 并结束。

判定标准:所有非法输入均被拦截并给出对应错误提示,合法输入(如姓名“张三”、年龄“25”)能正确输出问候语,即视为通过。