2015-02-09 2 views
0

У меня есть код, настроенный, чтобы разрешить только 3 счета от определенного пользователя, сохраненного в текстовом файле. Но я изо всех сил стараюсь сделать эту работу. pname - это переменная для имени лица, и сумма, которую они получили, хранится под правильной переменной. Я также пытаюсь добавить время, которое они использовали, для которого я использую переменную etime. У меня есть основание, но я не могу исправить ошибки или сделать эту работу, поскольку я пытался адаптировать это из другого ответа к другому вопросу. Спасибо.Сохранение файла Python с ограничениями

   SCORE_FILENAME = "Class1.txt" 
       MAX_SCORES = 3 

       try: scoresFile = open(SCORE_FILENAME, "r+") 
       except IOError: scoresFile = open(SCORE_FILENAME, "w+") # File not exists 
       actualScoresTable = [] 
       for line in scoresFile: 
        tmp = line.strip().replace("\n","").split(",") 
        actualScoresTable.append({ 
              "name": tmp[0], 
              "scores": tmp[1:], 
              }) 
       scoresFile.close() 

       new = True 
       for index, record in enumerate(actualScoresTable): 
        if record["name"] == pname: 
         actualScoresTable[index]["scores"].append(correct) 
         if len(record["scores"]) > MAX_SCORES: 
          actualScoresTable[index]["scores"].pop(0) # OR del actualScoresTable[index]["scores"][0] 
         new = False 
         break 
       if new: 
        actualScoresTable.append({ 
              "name": pname, 
              "scores": correct, 
              }) 

       scoresFile = open(SCORE_FILENAME, "w+") # Truncating file (write all again) 
       for record in actualScoresTable: 
        scoresFile.write("%s,%s\n" % (record["name"], ","(record["scores"]))) 
       scoresFile.close() 
+1

Я думаю, что ваш вопрос выиграет от упрощения. –

+1

Это для [задач программирования GCSE Computing (14 - 16-летних)] (http://www.reddit.com/r/Python/comments/2gawvg/gcse_computing_programming_tasks_14_16_year_olds/)? –

+0

Это и как единственный в моем классе. И часть 6% страны. Я борюсь. Даже мой учитель не может мне помочь, так как они слишком мало знают о Питоне. Так кто-то может помочь? Я просто пытаюсь сделать это так, чтобы он сохранял переменные: pname, correct и etime (имена людей, количество, которое они получили правильно, и время, когда они были приняты), поэтому я хочу, чтобы это выглядело так: – PythonBeginner

ответ

0

Прежде всего, у вас есть проблема, когда вы пишете партитур в файл:

... 
scoresFile.write("%s,%s\n" % (record["name"], ","(record["scores"]))) 
... 

Эта линия поднимает TypeError из-за ","(record["scores]). Чтобы исправить это, просто удалите ",", который выглядит опечаткой.

После этого возникает семантическая ошибка при перезаписывании текущих баллов. С одной стороны, вы читали уже введенные оценки как строки:

... 
tmp = line.strip().replace("\n","").split(",") 
actualScoresTable.append({ 
         "name": tmp[0], 
         "scores": tmp[1:], 
         }) 
... 

Кроме того, вместо того, чтобы писать баллы в формате name,score1,score2,..., вы в конечном итоге писать его как name,[score1, score2], потому что вы пишете необработанный список объектов, а также в линия:

... 
scoresFile.write("%s,%s\n" % (record["name"], ","(record["scores"]))) 
... 


Далее, чтобы устранить проблему, которая вызывает программу неправильно выводить оценки, вы должны изменить пару вещей. Во-первых, вы должны убедиться, что, когда вы берете оценки из файла, вы меняете их на целые числа.

... 
for line in scoresFile: 
    tmp = line.strip().replace("\n","").split(",") 

    # This block changes all of the scores in `tmp` to int's instead of str's 
    for index, score in enumerate(tmp[1:]): 
     tmp[1+index] = int(score) 

    actualScoresTable.append({ 
          "name": tmp[0], 
          "scores": tmp[1:], 
          }) 
... 

После этого, вы также должны убедиться, что при создании новой записи, даже если есть только один балл вы храните его в списке:

... 
if new: 
    actualScoresTable.append({ 
          "name": pname, 
          "scores": [correct], # This makes sure it's in a list 
          }) 
... 

Наконец, чтобы убедиться, что программа выводит результаты в правильном формате, вы должны преобразовать их в строки и поставить запятые между ними:

... 
for record in actualScoresTable: 

    for index, score in enumerate(record["scores"]): 
     record["scores"][index] = str(score) 

    # Run up `help(str.join)` for more information 
    scoresFile.write("%s,%s\n" % (record["name"], ",".join(record["scores"]))) 
... 


Это должно сделать Это. Дайте мне знать, если что-то не сработает!

+0

Эй, спасибо за помощь, все работает так, как должно, но я не могу получить свои оценки для вывода и сортировки и т. д. Есть ли где-нибудь я мог бы связаться с вами напрямую? Спасибо :) – PythonBeginner

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