@realgord88

Почему не работает счетчик в Python/Flask?

Есть страница на Python/Flask. Пользователь должен вводить правильный ответ на умножение двух чисел и счетчик очков должен на 1 увеличиваться. Но к сожалению он не работает. Подскажите, пожалуйста. Есть скрин.
from flask import render_template, flash, redirect
from app import app
from forms import LoginForm
import random
import time

counter = 0

@app.route('/', methods = ['GET', 'POST'])
@app.route('/index', methods = ['GET', 'POST'])
def index():
    numb = 0
    answer = 0
    first = 0
    second = 0
    global counter
    form = LoginForm()
    first = random.randint(1, 10)
    second = random.randint(1, 10)
    answer = first*second
    if form.validate_on_submit():
        numb = int(form.answer.data)
        if numb == answer:
            counter += 1
            return redirect('/index')
        else:
            counter = 0
            return redirect('/index')
    return render_template("index.html",
        first = first,
        second = second,
        form = form,
        numb = numb,
        answer = answer,
        counter = counter)


Кусок из HTML
<h2><p align="center">{{first}}*{{second}}=</p></h2>

<form action="" method="post" name="answer">
    {{form.hidden_tag()}}
        <p align="center">{{form.answer(size=40)}}  <input type="submit" value="Ответить"></p>
        <p align="center">Счет: {{counter}}</p><br>


5ee5a065935d425c95a02ea2d5bbd877.png
  • Вопрос задан
  • 2953 просмотра
Решения вопроса 1
yokotoka
@yokotoka
Python guru
У вас логика программы нерабочая. :) Вы answer неправильно считаете. Вот что это такое?
first = random.randint(1, 10)
second = random.randint(1, 10)
answer = first*second


Вы генерируете first и second рандомно, показываете пользователю. Пользователь вводит ответ. При следующем запросе вы опять их рандомно генерируете (вместо того, чтобы взять те, с которыми пользователь дело имел) и проверяете произведение новых с тем что ввёл пользователь (а там произведение старых). Естественно, что счётчик увеличится с вероятностью той же, что и слон пролетит за окном. :)

А вообще, если делать правильно, то заведите пользователю сессию (например, flask-beaker) и сохраняйте результаты туда (в том числе answer, который ожидается с предыдущего шага). Иначе при количестве пользователей >1 на приложение у вас опять будут баги.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы