Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -95,21 +95,46 @@ def update_quiz_components(quiz_data):
|
|
95 |
radio_updates.append(radio_update)
|
96 |
return radio_updates + [gr.update(value="Please select answers and click 'Check Score'.", visible=True)]
|
97 |
|
98 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
print(f"Received radio_values: {radio_values}") # Debug print
|
100 |
print(f"Received quiz_data: {quiz_data}") # Debug print
|
101 |
-
|
|
|
|
|
102 |
correct_answers = [item.correct_answer for item in quiz_data.items[:10]]
|
|
|
103 |
print(f"User answers: {user_answer_list}") # Debug print
|
104 |
print(f"Correct answers: {correct_answers}") # Debug print
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
else:
|
112 |
-
message = f"### You got {score} out of
|
|
|
113 |
return message
|
114 |
|
115 |
# Define a colorful theme
|
@@ -155,10 +180,10 @@ with gr.Blocks(title="Quiz Maker", theme=colorful_theme) as QUIZBOT:
|
|
155 |
outputs=question_radios + [quiz_msg]
|
156 |
)
|
157 |
|
158 |
-
# Register the click event for Check Score with
|
159 |
check_score_btn.click(
|
160 |
fn=collect_answers_and_calculate,
|
161 |
-
inputs=question_radios + [quiz_data_state], #
|
162 |
outputs=[score_output],
|
163 |
api_name="check_score"
|
164 |
)
|
|
|
95 |
radio_updates.append(radio_update)
|
96 |
return radio_updates + [gr.update(value="Please select answers and click 'Check Score'.", visible=True)]
|
97 |
|
98 |
+
# FIXED FUNCTION: Changed parameter signature to accept all arguments positionally
|
99 |
+
def collect_answers_and_calculate(*all_inputs):
|
100 |
+
print(f"Total inputs received: {len(all_inputs)}") # Debug print
|
101 |
+
|
102 |
+
# The last input is quiz_data, the first 10 are radio values
|
103 |
+
radio_values = all_inputs[:10] # First 10 inputs are radio button values
|
104 |
+
quiz_data = all_inputs[10] # Last input is quiz_data
|
105 |
+
|
106 |
print(f"Received radio_values: {radio_values}") # Debug print
|
107 |
print(f"Received quiz_data: {quiz_data}") # Debug print
|
108 |
+
|
109 |
+
# Filter out None values but keep track of positions
|
110 |
+
user_answer_list = list(radio_values)
|
111 |
correct_answers = [item.correct_answer for item in quiz_data.items[:10]]
|
112 |
+
|
113 |
print(f"User answers: {user_answer_list}") # Debug print
|
114 |
print(f"Correct answers: {correct_answers}") # Debug print
|
115 |
+
|
116 |
+
# Calculate score - only count answered questions
|
117 |
+
score = 0
|
118 |
+
answered_questions = 0
|
119 |
+
for u, c in zip(user_answer_list, correct_answers):
|
120 |
+
if u is not None: # Only count if user answered
|
121 |
+
answered_questions += 1
|
122 |
+
if u == c:
|
123 |
+
score += 1
|
124 |
+
|
125 |
+
print(f"Calculated score: {score}/{answered_questions}") # Debug print
|
126 |
+
|
127 |
+
if answered_questions == 0:
|
128 |
+
message = "### Please answer at least one question!"
|
129 |
+
elif score == answered_questions:
|
130 |
+
message = f"### Perfect! You got {score} out of {answered_questions} correct!"
|
131 |
+
elif score > answered_questions * 0.7:
|
132 |
+
message = f"### Excellent! You got {score} out of {answered_questions} correct!"
|
133 |
+
elif score > answered_questions * 0.5:
|
134 |
+
message = f"### Good! You got {score} out of {answered_questions} correct!"
|
135 |
else:
|
136 |
+
message = f"### You got {score} out of {answered_questions} correct! Don't worry. You can prepare well and try better next time!"
|
137 |
+
|
138 |
return message
|
139 |
|
140 |
# Define a colorful theme
|
|
|
180 |
outputs=question_radios + [quiz_msg]
|
181 |
)
|
182 |
|
183 |
+
# FIXED: Register the click event for Check Score with correct input handling
|
184 |
check_score_btn.click(
|
185 |
fn=collect_answers_and_calculate,
|
186 |
+
inputs=question_radios + [quiz_data_state], # This creates a list of 11 inputs
|
187 |
outputs=[score_output],
|
188 |
api_name="check_score"
|
189 |
)
|