if a==2: while True: id2 = input("请输入要修改的学生学号:") with open("C:\Users\ASUS\Desktop\student.txt","r",encoding="UTF-8") as file1:#每一行是一个列表的元素 line_info = file1.readlines() #with open("C:\Users\ASUS\Desktop\student.txt","w",encoding="UTF-8") as file2#用以写入修改后的数据 #file2.write("学号\t姓名\t语文\t数学\t英语\tPython\n") # 写入标题行 for line in line_info: # 遍历列表 if id2 in line: # 如果修改的学生信息存在,就重新写入学生信息 print("已找到,请修改信息!") itemdel=line_info.pop(id2) name = input("请输入姓名:") score_chi = input("请输入语文成绩:") score_math = input("请输入数学成绩:") score_eng = input("请输入英语成绩:") score_py = input("请输入python成绩:") sum_score = int(score_chi)+int(score_eng) + int(score_py) + int(score_math) stu_info = id2 + '\t' + name + '\t' + score_eng + '\t' + score_py + '\t' + score_math + '\t' + str(sum_score) + '\n' with open("C:\Users\ASUS\Desktop\student.txt","w",encoding="UTF-8") as file2: file2.write(stu_info) print("修改成功!") break 我的代码需要完成通过对学生id的找寻 对找寻到的学生信息进行修改,但是我的代码只会保存修改的信息,将其他信息删去了 。请在我原代码的基础上修改 不要新定义一个函数
时间: 2023-07-07 22:43:43 浏览: 38
好的,我来解释一下你的代码存在的问题。在你的代码中,你使用了 `pop()` 函数来删除列表中的一个元素,但是 `pop()` 函数的参数应该是一个索引值,而你传递的是一个学生的学号。因此,`pop()` 函数并没有删除指定的学生信息,而是删除了列表中对应索引的元素。此外,在你的代码中,你还使用了 `break` 语句来跳出循环,但是这样会导致你只能修改一个学生的信息,并且无法继续查找和修改其他学生的信息。
针对这些问题,我稍作修改,如下所示:
```python
if a == 2:
id2 = input("请输入要修改的学生学号:")
with open("C:\Users\ASUS\Desktop\student.txt", "r", encoding="UTF-8") as file1:
lines = file1.readlines()
found = False
with open("C:\Users\ASUS\Desktop\student.txt", "w", encoding="UTF-8") as file2:
for line in lines:
if id2 in line:
found = True
name = input("请输入姓名:")
score_chi = input("请输入语文成绩:")
score_math = input("请输入数学成绩:")
score_eng = input("请输入英语成绩:")
score_py = input("请输入python成绩:")
sum_score = int(score_chi) + int(score_eng) + int(score_py) + int(score_math)
stu_info = id2 + '\t' + name + '\t' + score_chi + '\t' + score_math + '\t' + score_eng + '\t' + str(sum_score) + '\n'
file2.write(stu_info)
print("修改成功!")
else:
file2.write(line)
if not found:
print("没有找到该学生!")
```
在修改后的代码中,我将 `pop()` 函数替换成了遍历列表的方式来查找指定学生的信息,并且使用一个变量 `found` 来记录是否找到了该学生。如果找到了该学生,就读取用户输入的新信息,并将修改后的信息写入文件;否则,输出一个提示信息表明没有找到该学生。此外,我还删除了 `break` 语句,这样就可以继续查找和修改其他学生的信息了。