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(文件名)时:
Traceback (most recent call last): File "file1.py", line 68, in File "file2.py", line 45, in syn2 NameError: global name 'names' is not defined
答案 0 :(得分:1)
在程序预期之前,您正在运行文件“EOF”的末尾。
答案 1 :(得分: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)
答案 2 :(得分: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))
将写入“无”。
编辑: Python doc about Input/Output表示f.read(),this Python doc表示输入/ raw_input
答案 3 :(得分:0)
问题是myfunc
函数在每次迭代时重新打开文件,删除其内容。您应该将open
调用移至while循环之前。