我正在嘗試創建一個測驗應用程式。我有問問題的模塊,在串列框中顯示 4 個可能的答案,然后單擊按鈕獲取結果并檢查是否為真。
我的問題是試圖正確解釋從 sqlite 資料庫中提取的資料型別。無論我嘗試什么,它都會以串列的形式出現,所以我將它轉換為 type:dict,但是其余代碼不會像我手動定義 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'}]
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/qiye/533590.html
上一篇:Vue2.x下的各組件如何傳遞資訊?(不使用Vuex)
下一篇:如果勾選了復選框,如何運行命令
