Поднятие eoferror для файла
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 (последний вызов был последним): Файл "file1.py", строка 68, в Файл "file2.py", строка 45, в syn2 NameError: глобальное имя 'names' не определено
4 ответа
Я бы посоветовал хранить учеников / оценки в словаре. Если пользователь закончил свой ввод, 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)
Вы бежите в конец файла "EOF", прежде чем ваша программа ожидает.
У вас есть ошибка global name 'names' is not defined
потому что вы объявили names
в def entoles()
и видно только в этом объеме.
Вы должны объявить names
вне dev entoles()
если вы хотите иметь возможность получить к нему доступ.
Также
x=names.append(name)
f.write(str(x))
append - это метод, который добавляет элемент, переданный в список, на месте. Метод возвращает "Нет". Следовательно, f.write(str(x))
напишет "Нет".
РЕДАКТИРОВАТЬ: документ Python для ввода / вывода для f.read() и этот документ Python для ввода /raw_input
Проблема в том, что myfunc
Функция открывает файл на каждой итерации, удаляя его содержимое. Вы должны переместить open
вызов до цикла while.