IsaacKerson commited on
Commit
815d21b
1 Parent(s): 321875a

added new quiz page

Browse files
Files changed (3) hide show
  1. app.py +1 -0
  2. pages/grid.py +1 -1
  3. pages/quiz_new.py +85 -0
app.py CHANGED
@@ -14,6 +14,7 @@ app = MultiPage()
14
  st.markdown("# Quiz Maker")
15
 
16
  # Add all your application here
 
17
  app.add_page("Quiz", quiz.app)
18
  app.add_page("Upload", upload.app)
19
  app.add_page("View", view.app)
 
14
  st.markdown("# Quiz Maker")
15
 
16
  # Add all your application here
17
+ app.add_page("New Quiz", quiz_new.app)
18
  app.add_page("Quiz", quiz.app)
19
  app.add_page("Upload", upload.app)
20
  app.add_page("View", view.app)
pages/grid.py CHANGED
@@ -16,4 +16,4 @@ def app():
16
  response = AgGrid(df_template, editable=True, fit_columns_on_grid_load=True)
17
  st.form_submit_button()
18
 
19
- st.write(response['data'])
 
16
  response = AgGrid(df_template, editable=True, fit_columns_on_grid_load=True)
17
  st.form_submit_button()
18
 
19
+ st.write(response['data'])
pages/quiz_new.py ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import os.path
3
+ import sqlite3
4
+ import random
5
+ import datetime
6
+
7
+ # Custom imports
8
+ from pages.utils import add_blanks, chunker, random_session_id, check_answer, db_connect
9
+
10
+ def app():
11
+ BASE_DIR = os.path.dirname(os.path.abspath(__file__))
12
+ DATABASE = os.path.join(BASE_DIR, 'vocabulary_current.db')
13
+
14
+ def form_callback(questions):
15
+ st.session_state.form_submit = True
16
+ num_correct = 0
17
+ session_id = random_session_id()
18
+ student_id = 'UKWN'
19
+ uct_iso = datetime.datetime.utcnow().isoformat()
20
+ st.title("Feedback")
21
+ for idx, items in enumerate(questions):
22
+ answer = st.session_state[idx]
23
+ correct_str = 'incorrect'
24
+ correct_int = 0
25
+ if check_answer(items[1], answer):
26
+ correct_str = 'correct'
27
+ correct_int = 1
28
+ num_correct += 1
29
+ st.success(f"Question {idx + 1}")
30
+ else:
31
+ st.error(f"Question {idx + 1}")
32
+ st.write(f"{items[3]}")
33
+ st.write(f"Answer: {items[1]}")
34
+ st.write(f"Your answer: {answer}")
35
+ st.write(f"You are {correct_str}.")
36
+ insert_tup = (student_id, session_id, uct_iso, items[1], items[2], answer, correct_int, )
37
+ c, conn = db_connect(DATABASE)
38
+ c.execute("INSERT INTO responses VALUES (?, ?, ?, ?, ?, ?, ?)", insert_tup)
39
+ conn.commit()
40
+ conn.close()
41
+ score_val = 100 * num_correct / len(questions)
42
+ st.metric(label="Final Score", value=f"{score_val}%")
43
+
44
+ if "form_submit" not in st.session_state:
45
+ c, conn = db_connect(DATABASE)
46
+
47
+ units_list = []
48
+ for item in c.execute("SELECT DISTINCT unit FROM vocab"):
49
+ units_list.append(item[0])
50
+
51
+ st.title("Sentence Completion")
52
+ st.selectbox('Select a unit.', units_list, key='unit')
53
+ st.selectbox('How many question do you want?', [5,10,15,20], key='num_q')
54
+
55
+ unit = st.session_state.unit
56
+ num_q = st.session_state.num_q
57
+ input_tup = (unit, num_q)
58
+
59
+ st.header(unit)
60
+
61
+ st.write("Complete the sentences with the words from the word bank.")
62
+
63
+ questions = []
64
+ word_bank = []
65
+
66
+ query = "SELECT * FROM vocab WHERE unit = ? ORDER BY RANDOM() LIMIT ?"
67
+
68
+ for idx, item in enumerate(c.execute(query, input_tup)):
69
+ word = item[2]
70
+ word_bank.append(word)
71
+ sentence = item[4]
72
+ questions.append((idx, word, sentence, add_blanks(word, sentence)))
73
+
74
+ st.subheader("Word Bank")
75
+ random.shuffle(word_bank)
76
+ st.table(chunker(word_bank, 5))
77
+
78
+ with st.form("sentence_completion"):
79
+ for q in questions:
80
+ st.text_input(f'{q[0] + 1}. {q[3]}', key=q[0], placeholder="Type answer here")
81
+ submitted = st.form_submit_button(label="Submit", on_click=form_callback, args=(questions,))
82
+ if submitted:
83
+ st.write("Submitted")
84
+ conn.close()
85
+