У меня в коде на 39 строке(
if lesson_say in users_data[user_name][lesson_assessments_list]
) выводит ошибку: TypeError, когда написано users_data[user_name][lesson_assessment_list]. Но если просто user_data, то if не читает данные и пропускает их. Может кто-то знает как исправить?
import pickle
play = True
user_list = []
password_list = []
lesson_assessments = []
lesson_assessments_list = [] #
users_data = dict()
lessons = ["Алгебра", "Геометрия", "Русский язык", "Литература", "Информатика", "География", "История", "Английский язык", "Физкультура", "Обществознание", "Технология", "ИЗО", "Музыка", "Биология", "Физика", "ОБЖ"]
try:
opn_f = open('datafile.data', 'rb')
except IOError:
None
else:
users_data = pickle.load(opn_f)
user_list = pickle.load(opn_f) #
password_list = pickle.load(opn_f)
lesson_assessments_list = pickle.load(opn_f)
lesson_assessments = pickle.load(opn_f)
while play:
play_2= True
while play_2:
print("Здравствуйте! Введите ваш логин и пароль или зарегистрируйтесь(reg).")
user_name = input("логин: ")
if user_name in user_list:
login = user_list.index(user_name)
user_password = input("пароль: ")
if user_name == user_list[login] and user_password == password_list[login]:
el_sum = 0
quantity = 0
check_lesson = True
while check_lesson:
print('Какой урок вас интересует?\n',lessons,'\n Введите его :')
lesson_say = input()
users_data[user_name] = lesson_assessments, lesson_assessments_list
check_numbers = True
while check_numbers:
check_numbers_2 = True
while check_numbers_2:
print(users_data)
print(lesson_assessments_list)
print(lesson_assessments)
if lesson_say in users_data[user_name][lesson_assessments_list]: #данные про урок есть
index = users_data[user_name][lesson_assessments_list].index(lesson_say)
print(index)
print('__________________')
print('Ваш средний бал по {0}'.format(lesson_say),': ',users_data[user_name][lesson_assessments[index]] )
exit = input("Вы можете выбрать другой урок, написав urok, продолжить набор оценок, написав next, "
"удалить средний балл и ввести его заново,написав point, сохранить все ваши данные,написав save или выйти из приложения, написав exit: ")
if exit == 'exit':
print("Спасибо, что воспользовались нашим приложением")
opn_f = open('datafile.data', 'wb')
pickle.dump(users_data, opn_f)
pickle.dump(user_list, opn_f)
pickle.dump(password_list, opn_f)
pickle.dump(lesson_assessments, opn_f)
pickle.dump(lesson_assessments_list, opn_f)
opn_f.close()
play = False
play_2 = False
check_lesson = False
check_numbers = False
check_numbers_2 = False
elif exit == 'urok':
el_sum = 0
quantity = 0
check_numbers_2 = False
check_numbers = False
elif exit == 'next':
check_say_3 = True
while check_say_3:
check_say_4 = True
while check_say_4:
a = int(input("Введите число или напишите 0 для подсчёта ваших оценок: "))
quantity += 1
el_sum += a
if a > 5 :
print("Вводите число не более 5")
check_say_4 = False
el_sum -= a
quantity -= 1
if a == 0 :
check_group_2 = True
while check_group_2:
if quantity > 2 :
quantity -= 1
assessments = el_sum / quantity
users_data[user_name][lesson_assessments[index]] = users_data[user_name][lesson_assessments[index]] + assessments
check_group_2 = False
check_say_4 = False
check_say_3 = False
elif quantity < 2:
quantity -= 1
print("Введите ещё {0}".format(3 - quantity)," для подсчёта")
check_group_2 = False
elif a < 1:
print("Вводите число не менее 1")
check_say_4 = False
el_sum -= a
quantity -= 1
elif exit == 'point':
lesson_assessments[index] = 0
check_say = False
check_group = False
else:
print("Такой команды нет")
else:
if lesson_say in lessons: #данных про урок нет
check_say_2 = True
while check_say_2:
check_say = True
while check_say:
a = int(input("Введите число или напишите 0 для подсчёта ваших оценок: "))
quantity += 1
el_sum += a
if a > 5 :
print("Вводите число не более 5")
check_say = False
el_sum -= a
quantity -= 1
if a == 0 :
check_group = True
while check_group:
if quantity > 2 :
quantity -= 1
assessments = el_sum / quantity
lesson_assessments.append(assessments)
lesson_assessments_list.append(lesson_say)
users_data[user_name] = lesson_assessments, lesson_assessments_list #
print('__________________')
print('Ваш средний бал по {0}'.format(lesson_say),': ', assessments)
exit = input("Вы можете выбрать другой урок, написав urok, продолжить набор оценок, написав next, "
"удалить средний балл и ввести его заново,написав point, сохранить все ваши данные,написав save или выйти из приложения, написав exit: ")
if exit == 'exit':
print("Спасибо, что воспользовались нашим приложением")
opn_f = open('datafile.data', 'wb')
pickle.dump(users_data, opn_f)
pickle.dump(user_list, opn_f)
pickle.dump(password_list, opn_f)
pickle.dump(lesson_assessments, opn_f)
pickle.dump(lesson_assessments_list, opn_f)
opn_f.close()
play_2 = False
play = False
check_lesson = False
check_numbers = False
check_numbers_2 = False
check_say_2 = False
check_say = False
check_group = False
elif exit == 'urok':
el_sum = 0
quantity = 0
check_numbers_2 = False
check_numbers = False
check_group = False
check_say = False
check_say_2 = False
elif exit == 'next':
check_say = False
check_group = False
elif exit == 'point':
el_sum = 0
quantity = 0
check_say = False
check_group = False
else:
print("Такой команды нет")
quantity += 1
elif quantity < 2:
quantity -= 1
print("Введите ещё {0}".format(3 - quantity)," для подсчёта")
check_group = False
elif a < 1:
print("Вводите число не менее 1")
check_say = False
el_sum -= a
quantity -= 1
else:
print ("У вас нет такого урока")
check_numbers = False
check_numbers_2 = False
else:
print("В базе нет вашей учётной записи или логин или пароль неправильны")
break
elif user_name == 'reg':
check_new_user_name = True
while check_new_user_name:
check_new_user_name_2 = True
while check_new_user_name_2:
new_user_name = input("Введите ваш новый логин: ")
if new_user_name in user_list:
print("Такой пользователь уже есть. Введите другой логин.")
check_new_user_name_2 = False
else:
check_new_user_name = False
check_new_user_name_2 = False
check_new_password = True
while check_new_password:
new_user_password = input("Введите ваш новый пароль: ")
check_new_password = False
user_list.append(new_user_name)
password_list.append(new_user_password)
play_2 = False
# данные должны сохраняться только на этой учётной записи