Я пишу приложение для викторины на pythonany везде, где используется колба. Это первый раз, когда я когда-либо использовал флягу или питон, где-то еще, поэтому я очень много еще учусь. Приведенная ниже функция генерирует странную ошибку: иногда она генерирует 11 или 9 словарных статей вместо 10, хотя параметр Qnum никогда не изменяется.
Я подумал, что проблема может быть связана с псевдонимами (поскольку функция удаляет запись), поэтому я попытался составить отдельные списки, пройдя по словарным ключам и значениям. Код работал нормально, когда я писал его непосредственно в основной файл приложения, но как только я абстрагировал его в вспомогательную функцию, он начал воспроизводиться.
Из файла функций помощника:
def create_answer_dict(Dict, Qnum):
import random
Qdict={}
for i in range(Qnum):
#Choose random word to test
Qkeys=[]
for key in Dict.keys():
Qkeys.append(key)
Qword=random.choice(Qkeys)
#Get correct answer from dictionary
correctAnswer = Dict[Qword]
#Generate wrong answer options
wrongAnswers=[]
for value in Dict.values():
wrongAnswers.append(value)
del wrongAnswers[wrongAnswers.index(correctAnswer)]
wrongAnswers = random.sample(wrongAnswers, 3)
answerOptions = wrongAnswers + [correctAnswer]
random.shuffle(answerOptions)
Qdict[Qword]=answerOptions
return Qdict
Из основного файла приложения:
@app.route("/", methods=["GET","POST"])
def index():
Qdict=create_answer_dict(questions, total)
if request.method == "GET":
return render_template('main.html', q = Qdict, keys=Qdict.keys())
elif request.method == 'POST':
score=0
for i in Qdict.keys():
answered=request.form[i]
if original_questions[i]==answered:
score+=1
return render_template("results.html", score=score, total=total)
Из представления html:
<form action='/' method='POST'>
<ol>
{% for i in keys %}
<li>What is the French for <u>{{i}}</u> ? </li>
{% for j in q[i] %}
<input type='radio' value='{{j}}' name='{{i}}' style="margin-right: 5"/>{{j}}
<br></br>
{% endfor %}
{% endfor %}
</ol>
<input type="submit" value="submit" />
</form>
Как это должно работать:
Возможные вопросы и ответы хранятся в объекте словаря.
В моем главном файле приложения я вызываю эту функцию из файла вспомогательных функций, используя свой словарь вопрос-ответ и переменную сумму в качестве параметров. Всего установлено 10.
Функция выбирает вопросы Qnum, находит соответствующий ответ и выбирает 3 случайных неправильных ответа.
Возвращает их в виде словаря в следующем формате:
{Question1:[CorrectAnswer, IncorrectAnswer1,IncorrectAnswer2, IncorrectAnswer3],
Question2:[CorrectAnswer, IncorrectAnswer1,IncorrectAnswer2, IncorrectAnswer3],
etc.}
Все возвращается без сообщения об ошибке, просто в словаре иногда на одну или на одну запись больше, чем ожидалось.