2015-04-29 2 views
1

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

У меня была такая же проблема с другим кодом и получен ответ, но я еще не сделал ошибку, которую я сделал снова (пытаясь сразу написать несколько переменных в файл), так что ответ не применимо в этот раз.

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 



info = str(forename) + "," + str(surname) + "," + str(score) + "\n"  



if classno == 1: 
    file=open("class1.txt", "a") 

elif classno == 2: 
    file=open("class2.txt", "a") 

else: 
    file=open("class3.txt", "a") 


maxnames = sum(1 for line in file) 
name = [[] for i in range(maxnames)] #creates empty list 


for count in range(maxnames): 
    line = file.readline() #defines one line 
    line=line.strip("\n") #defines where lines end 
    data = line.split(",") #defines each data particle 

    name[count].append(data[0]) #puts name in 
    name[count].append(data[1]) #puts scores in 
    name[count].append(data[2]) 
    name[count].append(data[3]) 


if forename == name[c][0] and surname == name[c][1]: 
    name[c][4]=name[c][3] 
    name[c][3]=name[c][2] 
    name[c][2]=score 
else: 
    file.write(info) 

file.close() 


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

Вот что я вижу: enter image description here

+1

Вы можете публиковать полную информацию об ошибке? – bladexeon

+0

Traceback? что ? который недавно звонил? – ZdaR

+0

- полная ошибка. Я редактировал сообщение со снимком экрана. @bladexeon – gulliver

ответ

0

Проблема начинается с того, что вы открываете файл для записи (с использованием режима 'a'), а затем пытается читать из него. Если вы измените это на 'r+', проблема может решить сама. Без реальной трассировки невозможно точно знать.

+0

Я пробовал это, и это не сработало для меня. я изо всех сил пытаюсь получить реальную трассировку - я немного новичок ахаха! – gulliver

+0

@gulliver открыть ваш терминал и набрать 'python3 путь/to/your/python/file.py' –

+0

@gulliver вам нужно запустить его с помощью' python3', а не только 'python'. Вы написали код в Python3 (где результат вызова 'input' - это строка), и обычно система' python' является Python2 (где результат вызова 'input' является ссылкой на объект Python) –