Spaces:
Runtime error
Runtime error
| #!/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[ ]: | |