╭☞(  ̄ ▽ ̄)╭☞ 2022-05-25 22:01 采纳率: 100%
浏览 162
已结题

显示 IndexError: list index out of range 但是我一直搞不懂在哪里出了问题 下面是代码

我这个是做一个简单的信息系统 前面需要把文档变成字典然后插入到列表中进行操作的,但是就是一直搞不定前面这个
student1 = []
headline = []
def load_info():
fr = open("D:\student.txt", 'r', encoding="utf_8") ##这个文档是这样的 在结尾
head = fr.readline()
headline.append(head)
fr.seek(0, 0)
lines = fr.readlines()
field = lines.pop(0).split(',')
for eachline in lines:
t = eachline.split('\t')
t[4] = t[4].strip('\n')
card_dict = {
'xuehao': 't[0]',
'name': 't[1]',
'bkxx': 't[2]',
'bx': 't[3]',
'xb': 't[4]',
}
student1.append(card_dict)
print('学生信息导入成功')
fr.close()

页面

def menu():
print('-' * 30)
print("欢迎来到学生管理系统")
print("1.输入学号查询成绩")
print("2.添加考研学生信息")
print("3.删除考研学生信息")
print("4.所有考研学生信息")
print("5.修改考研学生信息")
print("6.保存学生信息到指定文件")
print("7.根据考研专业生成词云图")
print("8.根据生源地生成词云图")
print("9.考研率和考研成功率对比图")
print("0.退出系统")
print("-" * 30)

打印信息

def lookup():
sid = int(input("输入查询学号:")) - 1 # 学号
if sid > len(student1) - 1:
print("输入错误,返回菜单")
else:
print(student1[sid]) # 输出信息
input("按回车键继续")

添加信息

def append():
newsid = eval(input('输入新同学学号(从4开始):'))
newname = eval(input('输入新同学姓名:'))
newage = eval(input('输入新同学年龄:'))
newsocer = eval(input('输入新同学成绩:'))
newstudent1 = {}
newstudent1[newsid] = newname # 添加 学号、姓名
newstudent1['age'] = newage # 添加年龄
newstudent1['socer'] = newsocer # 添加成绩
student1.append(newstudent1) # 加入列表
input("按回车键继续")

删除信息

def delete():
did = int(input("输入需要删除的成绩对应的学号:")) - 1
del student1[did] # 删除指定信息
input("按回车键继续")

##输出所有学生信息
def allinformation():
print("所有信息如下:")
i = 1
for show in student1:
print("{}".format(show)) # 打印学生信息
i += 1
input("按回车键继续")

##修改信息
def revise():
resid = int(input("输入要修改的学生学号:")) - 1
r = input("要修改的对象(1.年龄;2.成绩;否则,都修改):")
if r == '1':
newage = input("修改后的年龄")
student1[resid]['age'] = newage
elif r == '2':
newsocer = input("修改后的成绩")
student1[resid]['socer'] = newsocer
else:
newage = input("修改后的年龄")
newsocer = input("修改后的成绩")
student1[resid]['socer'] = newsocer
student1[resid]['age'] = newage
input("按回车键继续")

##保存学生信息
def save():
f = open('student.txt', 'w') # 打开文件
f.write(str(student1)) # 写入文件
f.close() # 关闭文件
input("保存成功按回车键继续")
##词云图

##主程序

load_info()
print("学生信息导入")
while True:
menu()
key = input("输入选项数字 查询/输入 信息:")
if key == '1':
lookup() # 打印指定学生信息
elif key == '2':
append() # 添加新的学生信息
elif key == '3':
delete() # 删除指定学生信息
elif key == '4':
allinformation() # 打印所有信息
elif key == '5':
revise() # 修改指定学生信息
elif key == '6':
save() # 保存信息
elif key == '0':
print("确定退出?")
exit = input("输入yes退出:")
if exit == 'yes':
break
else:
print("输入错误,返回 ")

学号,姓名,报考学校,本科学校,性别
2,b,B,北京大学,女
3,c,C,河南大学,男
4,d,D,安徽大学,女
5,a,E,西安大学,男
6,b,A,河北大学,女
7,c,B,重庆大学,男
8,d,C,四川大学,女
9,a,D,福建大学,男
10,b,E,上海大学,女
11,c,A,清华大学,男
12,d,B,北京大学,女
13,a,C,河南大学,男
14,b,D,安徽大学,女
15,c,E,西安大学,男
16,d,A,河北大学,女
17,a,B,重庆大学,男

就是这种形式 我写成了一个文档

  • 写回答

1条回答 默认 最新

  • 二九筒 2022-05-26 14:10
    关注

    主要是你取出的值哪儿没分割对,导致取出的值有换行,下面是我改了一下的代码

    
    student1 = []
    headline = []
    def load_info():
        fr = open("C:/Users/suoer/Desktop/1.txt", 'r', encoding="utf_8") ##这个文档是这样的 在结尾
        head = fr.readline()
        headline.append(head)
        fr.seek(0, 0)
        lines = fr.readlines()
        lines.pop(0).split(',')
        for eachline in lines:
            t = eachline.split('\n')[0]
            t=[i for i in t.split(",")]
            card_dict = {
            'xuehao': t[0],
            'name': t[1],
            'bkxx': t[2],
            'bx': t[3],
            'xb': t[4],
            }
            student1.append(card_dict)
        print('学生信息导入成功')
        fr.close()
        print(headline)
        print(student1)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月3日
  • 已采纳回答 5月26日
  • 创建了问题 5月25日

悬赏问题

  • ¥15 微服务假死,一段时间后自动恢复,如何排查处理
  • ¥15 cplex运行后参数报错是为什么
  • ¥15 之前不小心删了pycharm的文件,后面重新安装之后软件打不开了
  • ¥15 vue3获取动态宽度,刷新后动态宽度值为0
  • ¥15 升腾威讯云桌面V2.0.0摄像头问题
  • ¥15 关于Python的会计设计
  • ¥15 聚类分析 设计k-均值算法分类器,对一组二维模式向量进行分类。
  • ¥15 stm32c8t6工程,使用hal库
  • ¥15 找能接spark如图片的,可议价
  • ¥15 博通raid 的写入速度很高也很低