Показывать следующий ключ в словаре на основе действий пользователя - python - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь написать функцию для теста Python, которая покажет следующий ключ (озаглавленный «вопрос») в словаре на основе действий пользователя.У меня уже есть функциональность, чтобы проверить правильность ответа, но я изо всех сил пытаюсь показать следующий ключ (вопрос).Я также даю пользователю 3 попытки решить вопрос, поэтому следующий вопрос не может быть отображен, если либо а) на вопрос не будет дан ответ, либо б) у него закончатся догадки.

Я играл с циклами for и while, но все, что я могу сделать, это повторять одно и то же снова и снова.Должен ли я использовать параметр диапазона или что-то еще ??

riddles=[]
with open("data/riddles.json") as riddles_file:
    riddles = json.load(riddles_file)

def right_answer(answer, riddle):
    return answer == riddle["answer"]

def next_question(riddles):    
    for riddle in riddles:
        #run the first question. If question correct, run the next question. 

app = Flask(__name__)
app.secret_key = 'some_secret' 

@app.route('/<user>', methods = ['GET', 'POST'])
def quiz(user):

    riddle = riddles[0]
    #hard coded to show first question 

    max_guesses = 3

    counter = 0

    if request.method == "POST":
        answer = request.form.get("answer")

        while counter < max_guesses:
            if right_answer(answer, riddle):
                game_status[user] += 1
                next_question(riddles)
                return render_template("user.html", user=user, score=game_status[user], question=riddle["question"], message = "Correct. Well done!")

            else:
                counter += 1
                guesses_left = max_guesses - counter
                print("answer")
                return render_template("user.html", user=user, score=game_status[user], question=riddle["question"], message = "This is wrong. Try again. Your remaining guesses are:", guesses = guesses_left, answer = answer)

    return render_template("user.html", user=user, score=game_status[user], question=riddle["question"] )

1 Ответ

0 голосов
/ 10 июня 2018

так, как я бы это сделал: у викторины был бы аргумент riddle_number с его значением по умолчанию, равным 0

def quiz(user, riddle_number=0):

    riddle = riddles[riddle_number]

, в то время как у вас есть плохой тест: он предназначен только для сбоев.вместо этого создайте флаг

    next_riddle = False
    while not next_riddle:
        if right_answer(answer, riddle):
            next_riddle = True
            [...]

        else:
            guesses_left = max_guesses - counter
            if guesses_left == 0:
                next_riddle = True
            [...]

, затем я вызову викторину с riddle_number+1

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