Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
#!/usr/bin/env python | |
# coding: utf-8 | |
# In[ ]: | |
import panel as pn | |
import requests | |
import pandas as pd | |
pn.extension() | |
# In[ ]: | |
def get_data(num_questions, difficulty, category): | |
url = f"https://opentdb.com/api.php?amount={num_questions}&category={category_match[category]}&difficulty={difficulty}&type=boolean" | |
df = pd.DataFrame( | |
requests.get(url).json()['results'] | |
) | |
return df | |
# In[ ]: | |
category = pn.widgets.Select( | |
name='Category', | |
options=[ | |
'General Knowledge', | |
'Film', | |
'Music', | |
'Video Games', | |
'Science & Nature', | |
'Computers', | |
'Geography', | |
'History', | |
'Politics', | |
'Animals', | |
'Japanese Anime & Manga' | |
], | |
value='General Knowledge' | |
) | |
category | |
# In[ ]: | |
category_match = { | |
'General Knowledge': 9, | |
'Books': 10, | |
'Film': 11, | |
'Music': 12, | |
'Musicals & Theatres': 13, | |
'Television': 14, | |
'Video Games': 15, | |
'Board Games': 16, | |
'Science & Nature': 17, | |
'Computers': 18, | |
'Mathematics': 19, | |
'Mythology': 20, | |
'Sports': 21, | |
'Geography': 22, | |
'History': 23, | |
'Politics': 24, | |
'Art': 25, | |
'Celebrities': 26, | |
'Animals': 27, | |
'Vehicles': 28, | |
'Comics': 29, | |
'Gadgets': 30, | |
'Japanese Anime & Manga': 31, | |
'Cartoon & Animations': 32 | |
} | |
# In[ ]: | |
difficulty = pn.widgets.Select( | |
name='Difficulty', | |
options=['easy', 'medium', 'hard'], | |
value='easy' | |
) | |
difficulty | |
# In[ ]: | |
num_questions = pn.widgets.DiscreteSlider( | |
name='Number of Questions', | |
options=[5, 10, 15, 20], value=5 | |
) | |
num_questions | |
# In[ ]: | |
def question_list(i, df): | |
button_true = pn.widgets.Button(name='True') | |
button_false = pn.widgets.Button(name='False') | |
text = pn.widgets.StaticText(value='') | |
def processing_button_true(event): | |
if df.correct_answer[i] == 'True': | |
text.value = 'Correct!' | |
else: | |
text.value = 'Incorrect!' | |
def processing_button_false(event): | |
if df.correct_answer[i] == 'False': | |
text.value = 'Correct!' | |
else: | |
text.value = 'Incorrect!' | |
button_true.on_click(processing_button_true) | |
button_false.on_click(processing_button_false) | |
return pn.Column( | |
pn.pane.Markdown(f""" | |
| |
#Question {i+1}: | |
### {df.question[i]} | |
"""), | |
pn.Row(button_true,button_false), | |
text) | |
# In[ ]: | |
def get_data_and_questions(num_questions, difficulty, category): | |
df = get_data(num_questions, difficulty, category) | |
question_pane = [question_list(i, df) for i in range(len(df))] | |
trivia_pane = pn.Column(*question_pane) | |
return trivia_pane | |
# In[ ]: | |
interactive = pn.bind(get_data_and_questions, num_questions, difficulty, category) | |
# In[ ]: | |
# Layout using Template | |
template = pn.template.FastListTemplate( | |
title='Trivia Game', | |
sidebar=[num_questions, difficulty, category], | |
main=[interactive], | |
accent_base_color="#88d8b0", | |
header_background="#88d8b0", | |
) | |
template.servable() | |
# In[ ]: | |