對于我的測驗應用程式,我有一個提出問題的模塊,在串列框中顯示 4 個可能的答案,然后您單擊一個按鈕來獲取結果并檢查是否為真。
資料型別被錯誤地解釋為串列,我將其轉換為 type: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'}]
uj5u.com熱心網友回復:
我不太明白你現在在做什么。我提出這樣的建議:
questions = []
for r in records:
questions.append({
"question": r[0],
"answer": r[1],
"options": list(r[1:])
})
for question in questions:
correct_answer = question["answer"]
print(question["question"])
labelled = zip(ascii_lowercase, random.sample(question["options"], len(question["options"])))
for label, option in labelled:
print(label ": " option)
我已經替換了 tkinter 的東西,print所以它更容易使用,但將它改回來應該不會太難。它首先為每條記錄創建一個字典,其中包含問題、答案和選項。然后我使用了一個 for 回圈來顯示所有問題,您可能希望使用按鈕或其他東西一次顯示一個問題。問題的標簽與您之前的做法類似,但我已經迭代了對而不是制作字典。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/534658.html
上一篇:如何驗證屬性是唯一的?
下一篇:如何訪問查詢塊之外的變數?
