Уведомления

Группа в Telegram: @pythonsu

#1 Май 4, 2016 13:29:29

Samscara
Зарегистрирован: 2016-02-14
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с кодом

Добрый день!
Имеется задача: создать викторину, записывать рекорды в текстовый файл, викторину создал, в файл .dat записывает легко, в текстовый никак
вот сама прога:

import sys
def open_file(file_name, mode):
    try:
        the_file = open(file_name, mode)
    except IOError as f:
        print("Невозможно открыть файл", file_name, f)
        input("Чтобы выйти нажмите enter")
        sys.exit()
    else:
        return the_file
def next_line(the_file):
    line = the_file.readline()
    line = line.replace("/", "\n")
    return line
def next_block(the_file):
    category = next_line(the_file)
    question = next_line(the_file)
    answers = []
    for i in range(4):
        answers.append(next_line(the_file))
    correct = next_line(the_file)
    if correct:
        correct = correct[0]
    nominal = next_line(the_file)
   
    
    explain = next_line(the_file)
    return category, question, answers, correct, nominal, explain
def welcome(title):
    print("Добро пожаловать в викторину")
    print(title)
def main():
    scores = []
    choice = None
    while choice != 0:
        print(
        """
        ===Викторина===
        1 - начать игру
        2 - посмотреть рекорды
        """
        )
        choice = input("Ваш выбор: ")
        if choice == "1":
            name = input("Введите имя: ")
            trivia_file = open_file("the_trivia.txt", "r")
            title = next_line(trivia_file)
            welcome(title)
            score = 0
            category, question, answers, correct, nominal, explain = next_block(trivia_file)
            while category:
                print(category)
                print(question)
                for i in range(4):
                    print(i + 1, "-", answers[i])
                print("за правильный ответ вы можете получить ", nominal, "баллов")
                answer = input("Ваш ответ: ")
                if answer == correct:
                    print("Правильно!", end=" ")
                    score += int(nominal)
                else:
                    print("неверный ответ!", end=" ")
                print(explain)
                print("Счет: ", score)
                category, question, answers, correct, nominal, explain = next_block(trivia_file)
            trivia_file.close()
            print("это был последний вопрос")
            print("Вы набрали ", score, "баллов")
            if score >= 3:
                print("Вы настоящий пипетковод, поздравляю!")
            else:
                print("Вам еще стоит кое-чему поучиться у пипетководов")
            entry = (name, score)
            scores.append(entry)
            f = open("trivia.txt", "w")
            f.writelines(scores)
            f.close()
            
        elif choice == "2":
            f = open("trivia.txt", "r")
            print(f.read())
main()
input("Чтобы выйти нажмите Enter")
            
цикл с вопросами/ответами проходит на ура, но как дело доходит до записи выдает ошибку:
f.writelines(scores)
TypeError: write() argument must be str, not tuple
Помогите, бьюсь вторые сутки

Офлайн

#2 Май 4, 2016 13:41:17

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

помогите с кодом

tuple = (some, data, strin)
string = ‘some data string’
tupe 2 string = ''.join(tuple)



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Май 4, 2016 13:44:49

Samscara
Зарегистрирован: 2016-02-14
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с кодом

ZerGух ты, а вот этого я еще не проходил, я так понимаю здесь список/кортеж превращается в строку?
последняя строчка тоже не очень понятна
а еще такой момент: разве не должен список записываться в текстовый файл через метод writelines()?

Офлайн

#4 Май 5, 2016 08:00:34

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

помогите с кодом

writelines - хочет писать строку - а вы вместо строки даете ему кортеж.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version