使用核心Python、NumPy及Pandas开发DBMS时遭遇索引越界错误及输入逻辑问题求助
解决你的员工DBMS开发问题及列表索引越界错误
嘿,别担心,作为初学者遇到这些问题太正常了,我来帮你一步步理清问题并修正代码!
首先,咱们先拆解你代码里导致list out of range错误和功能失效的几个核心问题:
问题1:列表初始化的范围逻辑错误
你写的headers = [[] for i in range(1, header_count)]存在明显问题:
range(1, header_count)生成的是从1到header_count-1的整数序列,比如你输入员工数量是3,这个循环只会生成2个空列表(索引0和1),但后续循环里你用i从1到header_count-1,当header_count=3时i=2,这时候访问headers[2]就会超出列表的索引范围(列表只有2个元素,最大索引是1)。- 正确的初始化应该是生成
header_count个空列表,用range(header_count)就可以实现。
问题2:输入逻辑未匹配需求
你只在循环外输入了一次员工信息,然后循环把这同一个信息重复添加到所有子列表里,这样所有员工的数据都会完全一致,完全没实现“为每个员工单独输入信息”的核心需求。
修正后的完整代码
下面是调整后的代码,我加入了详细注释帮你理解每一步:
import numpy as np import pandas as pd # 获取员工数量 employee_count = int(input("Number of employees: ")) # 初始化空列表,用来存储所有员工的数据 employees_data = [] # 循环遍历每个员工,单独收集他们的信息 for idx in range(employee_count): print(f"\n--- 输入第 {idx+1} 位员工信息 ---") name = input("员工姓名: ") age = int(input("员工年龄: ")) position = input("员工职位: ") salary = int(input("员工薪资: ")) # 将当前员工的4项属性打包成列表,添加到总数据列表中 employees_data.append([name, age, position, salary]) # 将员工数据转换为DataFrame,并指定列名 employee_df = pd.DataFrame(employees_data, columns=["Name", "Age", "Position", "Salary"]) # 打印最终的员工数据库 print("\n===== 员工数据库 =====") print(employee_df)
额外优化建议(更适合初学者维护)
如果你想让代码更易读、后续修改更方便,也可以用字典来存储每个员工的信息,这样属性和值的对应关系更清晰:
import numpy as np import pandas as pd employee_count = int(input("Number of employees: ")) employees_data = [] for idx in range(employee_count): print(f"\n--- 输入第 {idx+1} 位员工信息 ---") # 用字典存储单个员工的所有属性 employee_info = { "Name": input("员工姓名: "), "Age": int(input("员工年龄: ")), "Position": input("员工职位: "), "Salary": int(input("员工薪资: ")) } employees_data.append(employee_info) # 直接将字典列表转换为DataFrame,列名会自动对应字典的key employee_df = pd.DataFrame(employees_data) print("\n===== 员工数据库 =====") print(employee_df)
这样就完美实现了你的需求:收集每位员工的4个属性数据,将所有数据转换为DataFrame,同时彻底解决了索引越界的问题!
内容的提问来源于stack exchange,提问作者Fahad Sayyed
相关产品推荐
相关产品推荐

