2015-04-29 3 views
1

У меня возникает «Traceback (последний последний вызов):« Ошибка при попытке записать в текстовый файл с помощью этого кода. Все три файла уже существуют (хотя я считаю, что им не нужно - код должен их создавать, если он не может их найти, если это не так), и все они находятся в том же каталоге, что и файл .py. Я не вижу своей ошибки - что я сделал неправильно?Неожиданная трассировка в текстовом файле в Python

import random 

forename="" 
surname="" 
classno=0 
numberone=0 
numbertwo=0 
correct=False 
score=0 
ops = ["+", "x", "-"] 



while forename == "" or forename.isnumeric(): 
    forename=input("What is your first name? ") 
    if forename == "": 
     print("You have to enter your first name.") 
    if forename.isnumeric() == True: 
     print("Your name must contain letters.") 

while surname == "" or surname.isnumeric(): 
    surname=input("What is your surname? ") 
    if surname == "": 
     print("You have to enter your name.") 
    if surname.isnumeric() == True: 
     print("Your name must contain letters.") 

while classno not in [1,2,3]: 
    while True: 
     try: 
      classno=int(input("What class are you in? ")) 
      break 
     except ValueError: 
      print("That wasn't right. Please try again.") 



for x in range(10): 
    operation=random.choice(ops) 

if operation == "-": 
    numberone=random.randint(0,10) 
    numbertwo=random.randint(0,numberone) 

elif operation == "x": 
    numberone=random.randint(0,12) 
    numbertwo=random.randint(0,12) 

else: 
    numberone=random.randint(0,100) 
    numbertwo=random.randint(0,(100-numberone)) 

while True: 
     try: 
      answer=int(input("What is " + str(numberone) + str(operation) + str(numbertwo) + "? ")) 
      break 
     except ValueError: 
      print("Incorrect input. Please try again.") 


if operation=="+": 
    if answer==numberone+numbertwo: 
     correct=True 

elif operation=="-": 
    if answer==numberone-numbertwo: 
     correct=True 

else: 
    if answer==numberone*numbertwo: 
     correct=True 

if correct==True: 
    print("Correct!") 
    score=score+1 

else: 
    print("Wrong!") 

correct = False 


if classno == 1: 
    file1=open("class1.txt", "a") 
    file1.write(forename,surname,score,"\n") 
    file1.close() 

elif classno == 2: 
    file2=open("class2.txt", "a") 
    file2.write(forename,surname,score,"\n") 
    file2.close() 

else: 
    file3=open("class.text", "a") 
    file3.write(forename,surname,score,"\n") 
    file3.close() 


print("You scored",score,"out of 10.") 

EDIT: это то, что я вижу, после того, как вопросы: enter image description here

+0

Может вы публикуете полную трассу? –

+0

добавил это к сообщению :) @BhargavRao – gulliver

+0

Что такое сообщение после Traceback? Подсказка: Ошибка: строка * –

ответ

2

Проблема, вероятно, при попытке записи в файл, в этой строке:

file2.write(forename,surname,score,"\n") 

Метод write получает только один аргумент. Создайте строку, передав ее как аргумент.

Например:

line_to_be_written = str(forename) + " " + str(surname) + " : " + str(score) + "\n" 
file2.write(line_to_be_written) 

выше способ является более простым для понимания, но в соответствии с рекомендациями Bhargav, вы можете использовать format как:

line_to_be_written = '{0} {1} {2} {3}'.format(forename, surname, score, '\n') 

или даже

line_to_be_written = '%s %s %s %s' % (forename, surname, score, '\n') 
+2

пробовал ваш код rafael - он сработал! Спасибо! – gulliver

+1

Nice +1. Это выглядит хорошо с 'format' ... :) –