QQ小鱼 发表于 2022-4-4 10:09:26

文件储存问题

print('''|---欢迎进入成绩录入程序---|
|---1:查询学生成绩:---|
|---2:插入新的同学成绩---|
|---3:修改已有同学成绩---|
|---4:退出成绩录入程序---|''')

import pickle
c = {}
while 1:
    temp = input('请输入相关的指令:')
    if temp == '2':
      while 1:
            a = open('E:/成绩单.pkl', 'rb')
            c = pickle.load(a)
            tem = input('插入,请重新输入名字(输入数字结束程序):')
            if tem.isdigit():
                break
            while 1:
                if tem in c:
                  tem = input('同学成绩已存在,请重新输入名字:')
                else:
                  break
            c = input('请输入分数:')# list(map(lambda x,y:,a,b)) 、list(zip(a,b)
            a = open('E:/成绩单.pkl', 'wb')
            pickle.dump(c, a)
            a.close()
    if temp == '1':
      while 1:
            a = open('E:/成绩单.pkl', 'rb')
            c = pickle.load(a)
            tem = input('请输入名字(查询,输入数字结束程序):')
            if tem.isdigit():
                break
            if tem in c:
                print(tem, '的成绩是:', c)
            else:
                print('查找不到')
      a = open('E:/成绩单.pkl', 'wb')
      pickle.dump(c, a)
      a.close()
    if temp == '3':
      while 1:
            a = open('E:/成绩单.pkl', 'rb')
            c = pickle.load(a)
            tem = input('请输入修改同学的名字(修改,输入数字结束程序):')
            if tem.isdigit():
                break
            if tem in c:
                c = input('请输入修改的成绩:')
            else:
                print('查找不到')
      a = open('E:/成绩单.pkl', 'wb')
      pickle.dump(c, a)
      a.close()
    if temp == '4':
      print('退出程序,再见')
      break



这个数据储存有问题,请问有什么解决问题吗

wp231957 发表于 2022-4-4 10:11:59

都不说啥问题谁知道你有啥问题

isdkz 发表于 2022-4-4 11:09:24

不建议将对 pickle 文件的读取放在循环里面,应该在一开始就把它读取到一个字典,

然后在循环处理,故对你的代码修改如下:

import os
import pickle

print('''|---欢迎进入成绩录入程序---|
|---1:查询学生成绩:---|
|---2:插入新的同学成绩---|
|---3:修改已有同学成绩---|
|---4:退出成绩录入程序---|''')

# 先判断 成绩单.pkl 是否存在,不存在则创建一个空成绩单
if not os.path.exists('成绩单.pkl'):
    with open('成绩单.pkl', 'wb') as f:
      pickle.dump({}, f)

# 把 成绩单 先读取到 score,在循环里不再读取 成绩单,直接对 score 操作
with open('成绩单.pkl', 'rb') as f:
    score = pickle.load(f)

while 1:
    temp = input('请输入相关的指令:')
    if temp == '2':
      while 1:
            tem = input('插入,请重新输入名字(输入数字结束程序):')
            if tem.isdigit():
                break
            while 1:
                if tem in score:
                  tem = input('同学成绩已存在,请重新输入名字:')
                else:
                  break
            score = input('请输入分数:')# list(map(lambda x,y:,a,b)) 、list(zip(a,b)
            a = open('成绩单.pkl', 'wb')
            pickle.dump(score, a)
            a.close()
    if temp == '1':
      while 1:
            tem = input('请输入名字(查询,输入数字结束程序):')
            if tem.isdigit():
                break
            if tem in score:
                print(tem, '的成绩是:', score)
            else:
                print('查找不到')
      a = open('成绩单.pkl', 'wb')
      pickle.dump(score, a)
      a.close()
    if temp == '3':
      while 1:
            a = open('成绩单.pkl', 'rb')
            c = pickle.load(a)
            tem = input('请输入修改同学的名字(修改,输入数字结束程序):')
            if tem.isdigit():
                break
            if tem in score:
                score = input('请输入修改的成绩:')
            else:
                print('查找不到')
      a = open('成绩单.pkl', 'wb')
      pickle.dump(score, a)
      a.close()
    if temp == '4':
      print('退出程序,再见')
      break

QQ小鱼 发表于 2022-4-4 11:34:04

isdkz 发表于 2022-4-4 11:09
不建议将对 pickle 文件的读取放在循环里面,应该在一开始就把它读取到一个字典,

然后在循环处理,故对 ...

非常感谢,是我的格局小了,你的方法很好

QQ小鱼 发表于 2022-4-4 15:04:56

QQ小鱼 发表于 2022-4-4 11:34
非常感谢,是我的格局小了,你的方法很好

大神,可以帮我看下,我另外一个问题吗?我已经发帖子了,就是读取不了文件的内容,老是报错
页: [1]
查看完整版本: 文件储存问题