Я пытаюсь получить доступ к значениям кортежей, но он говорит, что у него слишком много значений для распаковки при попытке создать метод сохранения / загрузки в Python - PullRequest
0 голосов
/ 20 февраля 2020

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

В файл .txt, который я сохранил "(' k ', 1.67) "и хотел бы получить доступ к имени и счету отдельно, но когда я пытаюсь получить доступ к значениям кортежей, он говорит, что у него слишком много значений для распаковки.

Как я могу это исправить?

**ValueError: too many values to unpack (expected 2)**

def overwrite(highest_score_details):
    with open("score.txt", 'w') as save:
        print(highest_score_details, file=save)


def get_score():
    with open("score.txt", 'r') as load:
        contents = load.readline()
        name_read, score_read = contents
        return contents


name = input("Enter your name: ")
start_time = my_timer()

for i in range(total_questions):
    make_question()

end_time = my_timer()
total_score = time_taken + wrong_answer_penalty

get_score()
highest_score_details = (name, total_score)
overwrite(highest_score_details)

1 Ответ

0 голосов
/ 21 февраля 2020

Похоже, вы пытаетесь использовать строку в качестве кортежа. readline возвращает строку, которая представляет собой набор символов. Чтобы правильно преобразовать эту строку в данные, которые можно использовать так, как вам нужно, вы должны определить способ ее анализа.

Анализ строки будет проще, если формат будет проще. Если, например, вы изменили способ хранения партитуры, чтобы она составляла k,1.67, вы могли бы сделать следующее:

contents = load.readline() # read "k,1.67"
tokens = contents.split(",") # convert to ["k","1.67"]
name = tokens[0] # store "k" as the name
score = float(tokens[1]) # convert from the string "1.67" to the value 1.67
return (name, score) # pack the values into a tuple
...