Отладка викторины в Python - PullRequest
1 голос
/ 24 мая 2011

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

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's 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

Ответы [ 2 ]

2 голосов
/ 24 мая 2011

Чтобы исправить бесконечный цикл, избегайте повторного открытия файла при каждом вызове на 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's 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 голосов
/ 24 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...