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

显示 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 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持