import gradio as gr import random # ------------------------ # 🎮 1. GUESS THE OUTPUT QUIZ # ------------------------ quiz_questions = [ { "code": 'print("Hello" + "World")', "options": ["HelloWorld", "Hello World", "Hello+World"], "answer": "HelloWorld", "hint": "What happens when you add two strings?" }, { "code": 'print(2 * 3)', "options": ["6", "23", "5"], "answer": "6", "hint": "Multiplication or joining?" }, { "code": 'x = 5\nprint(x + 2)', "options": ["7", "52", "2"], "answer": "7", "hint": "What is 5 + 2?" }, { "code": 'print(10 / 2)', "options": ["5", "2", "20"], "answer": "5", "hint": "What is 10 divided by 2?" }, { "code": 'x = "Python"\nprint(x[0])', "options": ["P", "y", "t"], "answer": "P", "hint": "What is the first letter of 'Python'?" }, { "code": 'x = [1, 2, 3]\nprint(x[1])', "options": ["2", "3", "1"], "answer": "2", "hint": "Which number is at the second position in the list?" }, { "code": 'x = "Code"\nprint(x[::-1])', "options": ["edoC", "Code", "CdeO"], "answer": "edoC", "hint": "What does slicing the string backwards give?" } ] quiz_score = 0 quiz_index = 0 quiz_history = [] def get_quiz_question(): return quiz_questions[quiz_index] def show_quiz_question(): q = get_quiz_question() return q["code"], gr.update(choices=q["options"]), "", f"⭐ Score: {quiz_score}" def check_quiz_answer(choice): global quiz_score correct = get_quiz_question()["answer"] result = "" if choice == correct: result = "✅ Correct! Great job!" quiz_score += 1 else: result = f"❌ Oops! The correct answer was: {correct}" return result, f"⭐ Score: {quiz_score}" def quiz_skip(): next_quiz() return show_quiz_question() def quiz_hint(): return f"💡 Hint: {get_quiz_question()['hint']}" def next_quiz(): global quiz_index quiz_history.append(quiz_index) quiz_index = (quiz_index + 1) % len(quiz_questions) def prev_quiz(): global quiz_index if quiz_history: quiz_index = quiz_history.pop() return show_quiz_question() # ------------------------ # 🔤 2. WORD SCRAMBLE GAME # ------------------------ scramble_words = [ ("python", "A popular programming language"), ("loop", "Used to repeat code"), ("print", "Outputs something on screen"), ("variable", "Stores data values"), ("function", "Encapsulates code into reusable blocks"), ("list", "A collection of items"), ("string", "A sequence of characters") ] def scramble_word(word): return ''.join(random.sample(word, len(word))) current_scramble = random.choice(scramble_words) def show_scramble(): global current_scramble current_scramble = random.choice(scramble_words) return scramble_word(current_scramble[0]), "" def check_scramble_answer(ans): correct = current_scramble[0] if ans.lower() == correct: return "✅ Awesome! That's correct!" else: return f"❌ Nope! The right word was '{correct}'." # ------------------------ # 🎲 3. CODE DICE # ------------------------ dice_challenges = [ "💡 Create a variable and assign it your name", "💡 Write code to add 2 + 3 and print it", "💡 Use a loop to print numbers from 1 to 5", "💡 Print your favorite color 3 times", "💡 Write a program to check if a number is even or odd", "💡 Create a list and add 3 items to it", "💡 Write a function that takes two numbers and returns their sum" ] def roll_dice(): return random.choice(dice_challenges) # ------------------------ # 🧩 4. PUZZLE BLOCKS (Ordering) # ------------------------ puzzle_code = [ "x = 5", "y = 3", "z = x + y", "print(z)" ] correct_order = "\n".join(puzzle_code) def check_code_order(user_code): if user_code.strip() == correct_order: return "✅ Perfect order! You built it right!" else: return "❌ Hmm... Try again! The order seems off." # ------------------------ # 📚 5. CODE FAIRY TALE # ------------------------ fairy_code = 'print("Cinderella" * 2)' fairy_answer = "CinderellaCinderella" def check_fairy_ans(ans): if ans.strip() == fairy_answer: return "✨ Correct! Cinderella doubled!" else: return "❌ Not quite, try again!" # ------------------------ # 💻 6. SIMPLE CALCULATOR # ------------------------ def add(x, y): return x + y def subtract(x, y): return x - y def multiply(x, y): return x * y def divide(x, y): if y != 0: return x / y return "❌ Cannot divide by zero!" # ------------------------ # 🎨 7. GUESS THE NUMBER # ------------------------ target_number = random.randint(1, 100) def guess_number(guess): global target_number if guess < target_number: return "⬆️ Try a higher number!" elif guess > target_number: return "⬇️ Try a lower number!" else: target_number = random.randint(1, 100) # Reset after correct guess return "🎉 Correct! Well done!" # ------------------------ # 🎨 UI # ------------------------ with gr.Blocks(theme=gr.themes.Base(primary_hue="purple", secondary_hue="pink")) as app: gr.Markdown("## 🧒✨ Welcome to Python FunLand! 🎮 Learn Python by Playing") with gr.Tabs(): with gr.TabItem("🎯 Guess the Output"): with gr.Row(): score_box = gr.Textbox(label="📊 Score", value="⭐ Score: 0", interactive=False) hint_box = gr.Textbox(label="💡 Hint", interactive=False) code_display = gr.Textbox(label="🧠 What will this Python code print?", interactive=False) options = gr.Radio(choices=[], label="Your Answer") result = gr.Textbox(label="🎯 Result", interactive=False) with gr.Row(): gr.Button("✅ Check Answer").click(fn=check_quiz_answer, inputs=options, outputs=[result, score_box]) gr.Button("💡 Get Hint").click(fn=quiz_hint, outputs=hint_box) gr.Button("⏭️ Skip").click(fn=quiz_skip, outputs=[code_display, options, result, score_box]) gr.Button("⏪ Back").click(fn=prev_quiz, outputs=[code_display, options, result, score_box]) app.load(show_quiz_question, outputs=[code_display, options, result, score_box]) with gr.TabItem("🔤 Word Scramble"): scramble_display = gr.Textbox(label="Unscramble This Word", interactive=False) word_input = gr.Textbox(label="Your Answer") scramble_result = gr.Textbox(label="Result", interactive=False) gr.Button("🔄 New Word").click(fn=show_scramble, outputs=[scramble_display, scramble_result]) gr.Button("✅ Submit").click(fn=check_scramble_answer, inputs=word_input, outputs=scramble_result) with gr.TabItem("🎲 Code Dice"): gr.Markdown("🎲 Click to roll a coding challenge!") dice_output = gr.Textbox(label="Challenge", interactive=False) gr.Button("🎲 Roll Dice").click(fn=roll_dice, outputs=dice_output) with gr.TabItem("🧩 Puzzle Blocks"): gr.Markdown("🧩 Arrange the code blocks in the correct order and paste below:") user_order = gr.Textbox(label="Paste Your Ordered Code", lines=5) puzzle_result = gr.Textbox(label="Result", interactive=False) gr.Button("✅ Submit").click(fn=check_code_order, inputs=user_order, outputs=puzzle_result) with gr.TabItem("📚 Code Fairy Tales"): gr.Markdown("🧚 Imagine what this code prints:") gr.Textbox(label="Code", value=fairy_code, interactive=False) fairy_input = gr.Textbox(label="Your Answer") fairy_result = gr.Textbox(label="Result", interactive=False) gr.Button("✅ Submit").click(fn=check_fairy_ans, inputs=fairy_input, outputs=fairy_result) with gr.TabItem("💻 Simple Calculator"): gr.Markdown("🧮 Let's do some math!") num1 = gr.Number(label="Enter first number") num2 = gr.Number(label="Enter second number") operation = gr.Radio(choices=["Add", "Subtract", "Multiply", "Divide"], label="Choose Operation") calc_result = gr.Textbox(label="Result", interactive=False) gr.Button("✅ Calculate").click(fn=lambda n1, n2, op: { "Add": add(n1, n2), "Subtract": subtract(n1, n2), "Multiply": multiply(n1, n2), "Divide": divide(n1, n2) }[operation], inputs=[num1, num2, operation], outputs=calc_result) with gr.TabItem("🎯 Guess the Number"): gr.Markdown("🎮 Guess the number between 1 and 100!") number_guess = gr.Number(label="Your Guess", interactive=True) guess_result = gr.Textbox(label="Result", interactive=False) gr.Button("✅ Check Guess").click