0
 import pickle
filename=input('Enter a file name:')

def commands():
    f=open(filename,'w')
    names=[]
    grades=[]
    while True:
            name=input("Give a student's name:")
            if name.lower()=='end':
                    f.close()
                    print("File closed")
                    print("Back to Menu")
                    break
            else:
                    x=names.append(name)
                    f.write(str(x))
            grade=input("Give student's grade:")          
            try:
                grade=float(grade)
                if 0<=grade<=10:
                    y=grades.append(grade)
                    f.write(str(y))
                else:
                    print("Please give a grade!Between 0-10! ")
            except ValueError:
                print(grade,"is not a number...Give only Numbers!")




def syn2(filename):
    try:
        f=open(filename,'r')
        f.read(names)
        f.read(grades)
        d1={}
        d1[names]=grades
        print(d1)
        print("Back to Menu")
    except IOError:
        return False

当我调用 syn2(filename) 时:

回溯(最近一次通话最后):
  文件“file1.py”,第 68 行,在
  文件“file2.py”,第 45 行,在 syn2 中
NameError:未定义全局名称“名称”
4

4 回答 4

1

您有错误 global name 'names' is not defined,因为您已在此范围内声明names并且def entoles()仅在此范围内可见。

如果你想能够访问它,你必须在names外面声明。dev entoles()

x=names.append(name)
f.write(str(x))

append 是一种将传递的项目原地附加到列表的方法。该方法返回'None' 因此,f.write(str(x))将写入'None'。

编辑: 关于f.read() 的输入/输出的Python 文档和用于输入/原始输入的 Python 文档

于 2009-12-10T00:37:59.467 回答
1

我建议将学生/成绩保存在字典中。如果用户已经完成了她的输入,pickle则将字典放入一个文件中。喜欢

grades = {}
while True:
    # ask for student's name n
    # ...

    if n.lower() == 'end':
        break

    # ask for student's grade g
    # ...

    grades[n] = g

pickle.dump(grades, yourfile)
于 2009-12-09T19:38:23.527 回答
1

在您的程序预期之前,您正在运行到文件“EOF”的末尾。

于 2009-12-09T19:11:15.457 回答
0

问题是该myfunc函数在每次迭代时重新打开文件,删除其内容。您应该将open调用移至 while 循环之前。

于 2009-12-09T19:40:38.423 回答