Отладка викторины в Python

1

Создание функции для печати вопроса, добавление выбора в список.

def print_et_list ():
    answer_list = []
    function = open ("modStory.txt","r")
    #Question
    question = function.readline()
    print question
    #Choices
    one = answer_list.append (function.readline())
    two = answer_list.append (function.readline())
    for item in answer_list:
        print item
    #Solution
    try:
        solution = int(function.readline())
    except:
        print "There an error in the answer"

    ##for the blank line
    function.readline()


    return question, one, two, solution, function

  ##Function for prompting the user for an answer, comparing an answer, keeping score        and printing score.
def hey_user (solution):
    score = 0
    user_answer = int(raw_input ("Enter what you think the answer is, user.\n"))
    if user_answer == solution:
        print "You've got it right!"
        score = score + 1
    elif user_answer == 0:
        sys.exit()
    else:
        print "You've got it wrong."
    return score

def main ():
        question, one, two, solution, function = print_et_list()
        scoresofar = hey_user (solution)
        print "\nYour score is now", scoresofar
        while question:
            question, one, two, solution, function = print_et_list()
        function.close()

main ()


raw_input ("Hit enter to exit.")

По какой-то причине я не могу правильно обработать эту вещь. Код выше infinte петли себя. Это следующий текстовый файл, который является просто искаженной песней. Программа будет правильно запускать первый фрагмент и будет инфинитировать первый фрагмент после ответа пользователя.

Can you carry my drink I have everything else
1 - I can tie my tie all by myself
2 - I'm getting tired, I'm forgetting why
2

is diving diving diving diving off the balcony
1 - Tired and wired we ruin too easy
2 - sleep in our clothes and wait for winter to leave
1

While it sings to itself or whatever it does
1 - when it sings to itself of its long lost loves
2 - I'm getting tired, I'm forgetting why
2
  • 0
    Что это должно делать?
  • 0
    извини, раньше этого не видел. Предполагается, что программа берет значение от пользователя и добавляет точку, если она соответствует решению. Например, в первом блоке 2 - правильный ответ. Я должен сопоставить запись пользователя с «правильным ответом», добавить точку в «оценка», если это правильно, а затем перейти к следующему вопросу.
Теги:
debugging
text-files

2 ответа

2
Лучший ответ

Чтобы исправить бесконечный цикл, не переустанавливайте файл при каждом вызове print_et_list()

Попробуйте это (я переименовал function в file_handle, чтобы быть немного более явным при чтении кода)

import sys

def print_et_list (file_handle):
    answer_list = []
    #Question
    question = file_handle.readline()
    print question
    #Choices
    one = file_handle.readline()
    two = file_handle.readline()
    answer_list.append(one)
    answer_list.append (two)
    for item in answer_list:
        print item
    #Solution
    solution = None
    try:
        result = file_handle.readline()
        result.replace("\n","")
        solution = int(result)
    except:
        print "There an error in the answer"

    ##for the blank line
    file_handle.readline()
    return question, one, two, solution

  ##file_handle for prompting the user for an answer, comparing an answer, keeping score        and printing score.
def hey_user (solution, score=0):
    user_answer = int(raw_input ("Enter what you think the answer is, user.\n"))
    print "you answered '%s'"%user_answer
    if user_answer == solution:
        print "You've got it right!"
        score += 1
    elif user_answer == 0:
        sys.exit()
    else:
        print "You've got it wrong."
    return score

def main ():
        file_handle = open ("modStory.txt","r")
        question, one, two, solution = print_et_list(file_handle)
        scoresofar = hey_user(solution)
        print "\nYour score is now", scoresofar
        while question:
            question, one, two, solution = print_et_list(file_handle)
            if question:
                scoresofar = hey_user(solution, scoresofar)
                print "\nYour score is now", scoresofar
        file_handle.close()

main ()


raw_input ("Hit enter to exit.")

Это не идеальная версия, но, похоже, она работает;)

  • 0
    Хм. Когда я делаю это, он запускается, но теперь, похоже, в функции Hey User произошла ошибка. UnboundLocalError: локальная переменная «решение», на которую ссылаются до назначения. В строке 35 указано, что функция Hey User не похожа на переменную решения. Любое понимание этого?
  • 0
    @ Louis93: я отредактировал свой ответ с «рабочей» версией;)
0

append ничего не возвращает, поэтому one и two являются None.

  • 0
    Эдуффи, почему их нет?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню