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

如何验证输入年份有效性并提取对应预期寿命相关数据?

解决CSV年份验证与数据提取问题

原代码存在的问题

  • 文件读取逻辑错误:for lines in f仅在第一次循环时读取文件内容,后续循环因文件指针已到末尾,不会再读取数据
  • 年份验证逻辑错误:any( [year in user_year for year in cat[2]] )是遍历单个年份字符串的字符进行判断,完全不符合“验证年份是否存在”的需求
  • 未提前存储数据,无法快速提取对应年份的信息

修正后的实现步骤

  1. 预加载数据:读取整个CSV文件,收集所有存在的年份,并将数据按年份分组存储
  2. 年份验证:获取用户输入后,先转为整数,检查是否在已收集的年份集合中
  3. 数据提取与展示:验证通过后,取出对应年份的所有国家、代码及预期寿命数据并输出

修正后的代码

import pathlib

# 获取文件路径
cwd = pathlib.Path(__file__).parent.resolve()
data_file = cwd / 'life-expectancy.csv'

# 预加载数据:按年份存储所有对应条目
year_data = {}
existing_years = set()

with open(data_file, 'r') as f:
    # 跳过表头(如果CSV有表头的话,无表头可注释此行)
    next(f)
    for line in f:
        parts = line.strip().split(',')
        # 确保每行字段完整
        if len(parts) != 4:
            continue
        country, code, year_str, age_str = parts
        # 转换数据类型,处理异常格式的行
        try:
            year = int(year_str)
            age = float(age_str)
        except ValueError:
            continue
        # 按年份分组存储数据
        if year not in year_data:
            year_data[year] = []
        year_data[year].append({
            'country': country,
            'code': code,
            'life_expectancy': age
        })
        existing_years.add(year)

# 处理用户输入与数据查询
while True:
    user_input = input('Enter the year of interest: ')
    # 验证输入是否为有效整数
    try:
        user_year = int(user_input)
    except ValueError:
        print('请输入有效的数字年份')
        continue
    # 验证年份是否存在于数据中
    if user_year not in existing_years:
        print(f'请输入文件中存在的年份,可选范围: {min(existing_years)}-{max(existing_years)}')
        continue
    # 格式化输出对应年份的数据
    print(f'\n年份 {user_year} 的预期寿命数据:')
    print(f'{"国家":<30} {"代码":<10} {"预期寿命"}')
    print('-' * 50)
    for entry in year_data[user_year]:
        print(f'{entry["country"]:<30} {entry["code"]:<10} {entry["life_expectancy"]:.2f}')
    print()

代码关键点说明

  • 预加载数据:用字典year_data按年份存储对应条目,集合existing_years记录所有存在的年份,保证验证和查询的效率
  • 双重验证:先检查输入是否为有效整数,再验证年份是否存在,避免无效输入干扰程序运行
  • 容错处理:跳过格式错误的行,防止因数据异常导致程序崩溃
  • 格式化输出:对齐展示数据,提升可读性

内容的提问来源于stack exchange,提问作者Ethan N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:35:27