对于我的测验应用程序,我有一个模块,它会问问题,在列表框中显示4个可能的答案,然后单击一个按钮来获取结果并检查是否为真。
数据类型被错误地解释为列表,我将其转换为type:dict,但代码对它的解释与手动定义的不同。如何重新构造查询或转换函数,使dict类型正确?当前的解释会混淆顺序并删除一些元素:
from tkinter import *
from random import randint
import sqlite3
import random
from string import ascii_lowercase
SentenceFrame = Toplevel()
#Connect to a Database
conn=sqlite3.connect('Question_Bank.db')
c = conn.cursor()
records=[]
#Query into Table
records = c.execute("SELECT Question, Correct_Answer, Option1 ,Option2 ,Option3 FROM Question_Bank").fetchall()
#commit changes
conn.commit()
#close connection
conn.close()
How_it_works = {
"First US State?": [
"Delaware",
"Ohio",
"Texas",
"Maryland"
],
"Fastest car?": [
"Ferrari",
"Mercedes",
"BMW",
"Tesla"
],
}
print(How_it_works)
print(type(How_it_works))
print((len(How_it_works)))
def Convert(a):
it = iter(a)
res_dct = dict(zip(it, it))
return res_dct
print(records)
print(len(records))
print(type(records))
QUESTIONS=Convert(records)
print(QUESTIONS)
print(type(QUESTIONS))
print((len(QUESTIONS)))
my_listbox=Listbox(SentenceFrame)
my_listbox.grid(row=6, column=1)
QuestionLabel = Label(SentenceFrame, text="", font=("Helvetica", 20))
QuestionLabel.grid(row=3, column=1)
num_questions = len(QUESTIONS)
questions = random.sample(list(QUESTIONS.items()), k=num_questions)
num_correct = 0
for num, (question, alternatives) in enumerate(questions, start=1):
QuestionLabel.config(text=question)
correct_answer = alternatives[0]
labeled_alternatives = dict(
zip(ascii_lowercase, random.sample(alternatives, k=len(alternatives)))
)
my_list=[labeled_alternatives]
print(my_list)
for k, v in labeled_alternatives.items():
my_listbox.insert(END, k + ": " + v)
结果:
How_it_Works:
{'First US State?': ['Delaware', 'Ohio', 'Texas', 'Maryland'], 'Fastest car?': ['Ferrari', 'Mercedes', 'BMW', 'Tesla']}
<class 'dict'>
2
数据库如何返回数据:
[('First US State?', 'Delaware', 'Ohio', 'Texas', 'Maryland'), ('Fastest car?', 'Ferrari', 'Mercedes', 'BMW', 'Tesla')]
2
<class 'list'>
转换后的数据:
{('First US State?', 'Delaware', 'Ohio', 'Texas', 'Maryland'): ('Fastest car?', 'Ferrari', 'Mercedes', 'BMW', 'Tesla')} <class 'dict'> 1
应用程序如何解释:
[{'a': 'Ferrari', 'b': 'BMW', 'c': 'Fastest car?', 'd': 'Mercedes', 'e': 'Tesla'}]
1条答案
按热度按时间5ktev3wc1#
我不太明白你现在在做什么。我建议这样:
我用
print
替换了tkinter的内容,这样更容易使用,但是要把它改回来应该不会太难。它首先为每条记录创建一个字典,其中包含问题、答案和选项。然后我使用一个for循环来显示所有的问题。你可能会想用一个按钮或其他东西一次一个地显示它们。问题的标签和你以前做的很相似,但是我我把这些对进行了迭代,而不是编字典。