streamlit-test / old /quiz_old.py
IsaacKerson
add get ignore and updated quiz page
787493e unverified
raw
history blame
No virus
3.13 kB
import streamlit as st
import os.path
import sqlite3
import random
import datetime
# Custom imports
from pages.utils import add_blanks, chunker, random_session_id, check_answer, db_connect
def app():
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DATABASE = os.path.join(BASE_DIR, 'vocabulary_current.db')
def form_callback(questions):
st.session_state.form_submit = True
num_correct = 0
session_id = random_session_id()
student_id = 'UKWN'
uct_iso = datetime.datetime.utcnow().isoformat()
st.title("Feedback")
for idx, items in enumerate(questions):
answer = st.session_state[idx]
correct_str = 'incorrect'
correct_int = 0
if check_answer(items[1], answer):
correct_str = 'correct'
correct_int = 1
num_correct += 1
st.success(f"Question {idx + 1}")
else:
st.error(f"Question {idx + 1}")
st.write(f"{items[3]}")
st.write(f"Answer: {items[1]}")
st.write(f"Your answer: {answer}")
st.write(f"You are {correct_str}.")
insert_tup = (student_id, session_id, uct_iso, items[1], items[2], answer, correct_int, )
c, conn = db_connect(DATABASE)
c.execute("INSERT INTO responses VALUES (?, ?, ?, ?, ?, ?, ?)", insert_tup)
conn.commit()
conn.close()
score_val = 100 * num_correct / len(questions)
st.metric(label="Final Score", value=f"{score_val}%")
if "form_submit" not in st.session_state:
c, conn = db_connect(DATABASE)
units_list = []
for item in c.execute("SELECT DISTINCT unit FROM vocab"):
units_list.append(item[0])
st.title("Sentence Completion")
st.selectbox('Select a unit.', units_list, key='unit')
st.selectbox('How many question do you want?', [5,10,15,20], key='num_q')
unit = st.session_state.unit
num_q = st.session_state.num_q
input_tup = (unit, num_q)
st.header(unit)
st.write("Complete the sentences with the words from the word bank.")
questions = []
word_bank = []
query = "SELECT * FROM vocab WHERE unit = ? ORDER BY RANDOM() LIMIT ?"
for idx, item in enumerate(c.execute(query, input_tup)):
word = item[2]
word_bank.append(word)
sentence = item[4]
questions.append((idx, word, sentence, add_blanks(word, sentence)))
st.subheader("Word Bank")
random.shuffle(word_bank)
st.table(chunker(word_bank, 5))
with st.form("sentence_completion"):
for q in questions:
st.text_input(f'{q[0] + 1}. {q[3]}', key=q[0], placeholder="Type answer here")
submitted = st.form_submit_button(label="Submit", on_click=form_callback, args=(questions,))
if submitted:
st.write("Submitted")
conn.close()