2014-01-07 3 views
0

Моя программа является викториной заявки на префект, и в начале викторины учащимся необходимо ввести: Name, Lastname и School class. В конце викторины программа рассчитает счет, и если они пройдут, то их данные будут отображаться на экране и записываться в текстовый файл. На этом этапе пользователю будет предложено написать краткое заявление о том, почему их следует считать префектом, и это также будет напечатано в файле. Пользователь должен иметь возможность распечатать файл в качестве квитанции, чтобы пройти тест на префект.Ошибка синтаксиса при попытке записи в текстовый файл в python

Это мой код, но он не работает, может кто-нибудь объяснить почему?

class Score_Window(tk.Toplevel): 
    '''A simple instruction window''' 
    def __init__(self, parent): 
     tk.Toplevel.__init__(self, parent) 
     score_str = str(sum(parent.score_per_question.values())) 
     self.score = tk.Label(self, width=80, height=4, text = "You're score was: " + score_str) 
     self.score.pack(side="top", fill="both", expand=True) 


     if int(score_str) >= 3: 
      print("Pass") 

      self.prefect = tk.Label(self, width=80, height=4, text = "You have passed, well done! You can now become a prefect.") 
      self.prefect.pack(side="top", fill="both", expand=True) 

      self.name = tk.Label(self, width=80, height=4, text = student_name) 
      self.name.pack(side="top", fill="both", expand=True) 

      self.surname = tk.Label(self, width=80, height=4, text = student_surname) 
      self.surname.pack(side="top", fill="both", expand=True) 

      self.tutor = tk.Label(self, width=80, height=4, text = student_tutor_group) 
      self.tutor.pack(side="top", fill="both", expand=True) 

      receipt_printoff = open("data.txt", "w") 
      receipt_printoff.write(student_name, " ",student_surname) 
      receipt_printoff.write(student_tutor_group) 
      statement = tkSimpleDialog.askstring("User data", "Enter something about yourself") 
      receipt_printoff.write((" ",statement) 

Проблема появляется на следующей строке, где есть ошибка 'синтаксис':

 with open("data.txt", "r") as l 
      for lines in l: 
       student_name2, student_surname2, statement2 = lines.split() 
       namelabel = label(self, text=student_name2) 
       namelabel.pack() 
       surnamelable = label(self, text=student_surname2) 
       surnamelable.pack() 
       Userinfolabel = label(self, text=statement2) 
       Userinfolabel.pack() 
    else: 
     print("Fail") 

     self.fail = tk.Label(self, width=80, height=4, text = "Unfortunately you have not scored highly enough to be considered for a prefect position.") 
     self.fail.pack(side="top", fill="both", expand=True) 
+0

Вы забыли 'receipt_printoff.close()' или лучше использовать ['with'] (http://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects) заявление, когда работа с файловыми объектами. –

+0

Ну что такое синтаксическая ошибка? – dimo414

+0

@ dimo414: На линии до того, где OP думает, что это так. –

ответ

0

with open("data.txt", "r") as l должен быть with open("data.txt", "r") as l: (обратите внимание на двоеточие).

0

Вам не хватает толстой кишки с конца with open("data.txt", "r") as l:.

4

Вы два синтаксические ошибки:

 receipt_printoff.write((" ",statement) 
     # -----------------------------------^ 
    with open("data.txt", "r") as l 
    # -----------------------------^ 

Вы пропавшие закрывающую скобку )и: двоеточие.

Первая строка - это то, что вызывает вашу немедленную синтаксическую ошибку, но как только вы исправите это, вы столкнетесь со второй ошибкой.

Возможно, вам захотелось написать пробел и утверждение; использование конкатенации для этого:

receipt_printoff.write(student_name + " " + student_surname) 

и

receipt_printoff.write(" " + statement) 

или использовать форматирование строк; Вы вероятно хотите добавить новые строки тоже:

receipt_printoff.write('{} {}\n'.format(student_name, student_surname)) 
# ... 
receipt_printoff.write(' {}\n'.format(statement)) 

потому file.write() не что иное, как print(); он не будет преобразовывать значения в строку для вас и может принимать только один аргумент за раз.

Смежные вопросы