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

读取人口数据文件触发String index out of range错误的解决咨询

问题解决方法

你的get_data函数存在两个核心问题:

  1. 重复打开文件,且返回的是原始字符串,不是结构化的数值数据
  2. 没有跳过表头行,导致非数值数据进入计算流程

修改后的get_data函数如下,它会跳过表头,读取所有数值行并转换为二维数值列表:

def get_data(file_path):
    data = []
    with open(file_path, "r") as f:
        # 跳过第一行表头
        next(f)
        for line in f:
            # 去除行首尾空白,分割成两个数值
            parts = line.strip().split()
            if parts:  # 跳过空行(如果有的话)
                year = int(parts[0])
                population = int(parts[1])
                data.append([year, population])
    return data

其他优化调整:

  • 调用get_data时,直接传入文件路径即可,不需要额外的name参数,示例:
    pop_data = get_data("Assignment7/pop.txt")
    avg_error = error(pop_data)
    print(avg_error)
    
  • 你的error函数里循环次数写死了/12,可以改成len(data)让代码适配不同行数的数据集:
    def error(data):
        total_error = 0
        for item in data:
            total_error += abs(item[1] - pop(item[0])) / item[1]
        return 100 * total_error / len(data)
    

错误根源说明:

原来的get_data返回的是整个文件的字符串,当你把这个字符串传给error函数时,for i in data会遍历字符串的每个字符,此时i是单个字符(比如'0'、' '等),访问i[1]自然会触发字符串索引越界错误。修改后的数据是二维数值列表,每个item都是包含年份和人口的列表,就能正常执行item[0]和item[1]的索引操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:30:40