Для синтаксической ошибки цикла в коде, но не при разделении

#python #for-loop #syntax #syntax-error

#python #for-цикл #синтаксис #синтаксическая ошибка

Вопрос:

Я создаю программу, которая должна указывать мне, какую задачу я должен выполнить в школе, но она выдает мне странную синтаксическую ошибку в цикле for. Вот весь код:

 def dumptodaydate():
 import pickle
 with open('LastOpenDate.txt', 'wb') as DOT:
  import time
  ODate = time.strftime('%d')
  OMonth = time.strftime('%m')
  OYear = time.strftime('%Y')
  List = {'Day':ODay, 'Month':OMonth, 'Year':OYear}
  pickle.dump(List, DOT)


def caltimelefttask():
 import pickle

 with open('LessonOut.txt', 'rb') as Li:
  Lesson = pickle.load(Li)

 with open('ExercisesOut.txt', 'rb') as Ei:
  Exercises = pickle.load(Ei)

 with open('AssignmentOut.txt', 'rb') as Ai:
  Assignment = pickle.load(Ai)

 with open('LastOpenDate.txt', 'rb') as LOD:
  List = pickle.load(LOD)

 from datetime import date
 Today = date.today()
 ODay = List['Day']
 OMonth = List['Month']
 OYear = List['Year']
 DifDay = (Today(eval(OYear),eval(OMonth), eval(ODay)).days
 for key in Lesson:
  OTimetask = Lesson[key]['TimeLeftTask']
  TimeLeft = OTimetask - DifDay
  Rating = Rating   (TimeLeft * 2)
  if Timeleft == 0 and OTimetask > 3:
   Rating = Rating   100
  elif OTimetask > 0 and TimeLeft == 0:
   Rating = Rating   50
  elif OTimetask > 4 and imeLeft == 0 and OTimetask != 0:
   Rating = Rating   50
  Lesson[key]['Rating'] = Rating

  for key in Exercises.keys():
  OTimetask = Exercises[key]['TimeLeftTask']
  TimeLeft = OTimetask - DifDay
  Rating = Rating   (TimeLeft * 2)
  if Timeleft == 0 and OTimetask > 3:
   Rating = Rating   100
  elif OTimetask > 0 and TimeLeft == 0:
   Rating = Rating   50
  elif OTimetask > 4 and imeLeft == 0 and OTimetask != 0:
   Rating = Rating   50
  Exercises[key]['Rating'] = Rating

 for key in Assignment.keys():
  OTimetask = Assignment[key]['TimeLeftTask']
  TimeLeft = OTimetask - DifDay
  Rating = Rating   (TimeLeft * 2)
  if Timeleft == 0 and OTimetask > 3:
   Rating = Rating   100
  elif OTimetask > 0 and TimeLeft == 0:
   Rating = Rating   50
  elif OTimetask > 4 and imeLeft == 0 and OTimetask != 0:
   Rating = Rating   50
  Assignment[key]['Rating'] = Rating


def ADD():
 print('Name of task? (Keep it short for convenience Example: Math1)n(Must be diferent from any other non deleted tasks)')
 Name = input('>>>')
 print('Description of task? (this can be as long as you want)')
 Desc = input('>>>')
 print('Rate the time it takes you to do the task on a scale from 1 to 20')
 Time = input('>>>')
 print('Rate the importance of the task on a scale from 1 to 20')
 Imp = input('>>>')
 print('Rate how much you want to do it on a scale from 1 to 5 n(1= want to do it, 5= don't want to')
 Want = input('>>>')
 print('enter deadline (day)')
 TimeDay = input('>>>')
 print('enter deadline (month)')
 TimeMonth = input('>>>')
 print('enter deadline(year)')
 TimeYear = input('>>>')
 print('what type of homework is it? (Lesson/Exercises/Assignment)')
 TaskType = input('>>>')


 from datetime import date
 Today = date.today()
 TaskForDate = date(eval(TimeYear), eval(TimeMonth), eval(TimeDay))
 TimeLeftTemp = abs((TaskForDate - Today).days)
 print ('You have', TimeLeftTemp, 'days to finish this task.')

 Rating = eval(Time)   eval(Imp)   eval(Want) - (TimeLeftTemp * 2)
 if TimeLeftTemp < 4:
  Rating = Rating   50
 if TimeLeftTemp <= 0:
  Rating = Rating   50

 if TaskType == 'Lesson':
  Lesson[Name] = {'Rating':Rating, 'Desc':Desc, 'TimeLeftTask':TimeLeftTemp}
 if TaskType == 'Exercises':
  Exercises[Name] = {'Rating':Rating, 'Desc':Desc, 'TimeLeftTask':TimeLeftTemp}
 if TaskType == 'Assignment':
  Assignment[Name] = {'Rating':Rating, 'Desc':Desc, 'TimeLeftTask':TimeLeftTemp}


def DEL():
 print ('What type of task is it? nLesson, Exercises or Assignment)')
 WhatDict = input('>>>')
 if WhatDict == Lesson:
  print(Lesson.keys())

 if WhatDict == Exercises:
  print(Exercises.keys())

 if WhatDict == Assignment:
  print(Assignment.keys())

 print ('What task do you want do delete?')
 WhatDel = input('>>>')

 if WhatDict == 'Lesson':
  try:
   del Lesson[WhatDel]
  except:
   pass

 elif WhatDict == 'Exercises':
  try:
   del Exercises[WhatDel]
  except:
   pass

 elif WhatDict == 'Assignment':
  try:
   del Assignment[WhatDel] 
  except:
   pass
   pass

 else:
  print('Sorry, the type of task is not recognised, please try again.')


def sort_by_subdict(dictionary, subdict_key):
 return sorted(dictionary.items(), key=lambda k_v: k_v[1][subdict_key])


def SHOW():
 ShowWhat = input('What type of task do you want to do?nLesson/Exercises/Assignment)n>>>')
 if ShowWhat == 'Lesson' or 'lesson':
  print (sort_by_subdict(Lesson, 'Rating'))

 elif ShowWhat == 'Exercises' or 'exercises':
  print (sort_by_subdict(Exercises, 'Rating'))

 elif ShowWhat == 'Assignment' or 'assignment':
  print (sort_by_subdict(Assignment, 'Rating'))

 else:
  print('Type of task not recognosed, please try again')


def dumptxt():
 import pickle

 with open('LessonOut.txt', 'wb') as Lo:
  pickle.dump(Lesson, Lo)

 with open('ExercisesOut.txt', 'wb') as Eo:
  pickle.dump(Exercises, Eo)

 with open('AssignmentOut.txt', 'wb') as Ao:
  pickle.dump(Assignment, Ao) 


caltimelefttask()


while True:
 print ('WARNING NEVER EXIT PROGRAM WITHOUT USING THE quit COMMAND,nOR ALL ACTIONS DONE WILL BE LOST')
 print ('Commands:')
 print ('add (to add a task)')
 print ('del (to delete a task)')
 print ('quit (to exit program)')
 print ('show (to see your tasks)')
 Input = input('>>>')


 if Input == 'add':
  ADD()


 elif Input == 'del':
   DEL()


 elif Input == 'show':
  SHOW()

 elif Input == 'quit':
  print ('are you sure you want to quit? y/n')
  Input = input('>>>')
  if Input == 'y':
   dumptxt()
   quit()
  elif Input == 'n':
   print ('Not exiting')
  else: 
   print ('Error, command not recognised')
  

Это выдает мне синтаксическую ошибку в строке 34, но она хорошо работает сама по себе (тогда в файле находится только [def caltimelefttask]), поэтому я не понимаю.

 DifDay = Today(eval(OYear),eval(OMonth), eval(ODay)).days
for key in Lesson:
  

Есть три вечных текстовых файла с пустыми маринованными dicts на них.

Если бы кто-нибудь мог помочь мне исправить эту ошибку (бьюсь об заклад, я забыл что-то глупое), это было бы высоко оценено.
Спасибо

Комментарии:

1. Было бы полезно, если бы вы указали, где находится строка 34. Мы не собираемся считать все это за вас.

2. Слишком много информации….

3. Не могли бы вы привести примерное значение «Список»?

4. @user3775786: Пожалуйста, прочитайте руководство по стилю для кода Python .

Ответ №1:

Эта строка:

 DifDay = (Today(eval(OYear),eval(OMonth), eval(ODay)).days
  

Отсутствует закрытие).

Далее, эта строка:

 for key in Exercises.keys():
  

не имеет правильного отступа.

Я бы рекомендовал прочитать это и очистить этот отступ.

Комментарии:

1. Также у него не должно быть такого импорта в случайных методах, все они должны быть вверху. А также ошибка прямо перед импортом