CURS ONLINE INTERACTIV

Python 3

PENTRU ÎNCEPĂTORI


"Primul volum Python în română care pur și simplu m-a uimit. Foarte bine explicat și ușor de înțeles." (Alexandru Cosmin)

"Cea mai bună carte de Python din RO." (Iulian Geană)

"Livrare promptă! M-am pus pe treabă!" (Emil Ilie)

TOATE RECENZIILE
IDEI DE PROIECTE
PAG. 1 / 1
Construirea unui joc educativ de Trivia în Python
Acasă >>> STEM, aplicații interdisciplinare

Scopul proiectului

Crearea unui joc educativ de tip trivia în Python, care să testeze și să consolideze cunoștințele de cultură generală ale utilizatorilor prin întrebări interactive și feedback instantaneu.

I. Concepție

Prima etapă este definitorie și creativă. Aici se stabilește ideea de bază a proiectului, scopul lui și modul în care va interacționa utilizatorul. Am căutat pe Internet și am descoperit că există Open Trivia DB, o bază de date publică, gratuită, construită chiar de comunitate, care pune la dispoziție întrebări de cultură generală grupate pe categorii, dificultăți și tipuri. Avantajul ei este că funcționează printr-un API simplu, adică printr-un link special care întoarce un set de întrebări în format JSON, astfel încât Python îl poate prelua fără să ai nevoie de cont, cheie de acces sau configurări complicate. Este genul de resursă ideală, pentru că deschide ușa către proiecte care arată foarte „reale” și conectate la Internet, fără stresul autentificării sau limitărilor comerciale.

Jocul va prelua întrebări reale pe care le va afișa pe rând, va combina răspunsurile corecte cu cele greșite și le va amesteca pentru fiecare întrebare. Se conturează astfel conceptele principale: utilizatorul va citi întrebarea, va alege una dintre variantele numerotate, iar programul va verifica imediat dacă răspunsul este corect sau greșit și va actualiza scorul. La final, se va afișa scorul obținut!

II. Proiectare

A doua etapă este planificarea și structurarea jocului, pregătirea mediului și a uneltelor necesare. Primul pas este să ne asigurăm că Python este instalat pe calculator. Apoi, pentru a putea prelua întrebările de pe Internet, avem nevoie de modulul requests. Instalarea lui se face simplu, deschizând terminalul sau CMD.exe și tastând: "pip install requests". Acest modul se descarcă automat și permite programului să trimită cereri web și să primească răspunsuri în format JSON. După instalare, modulul se poate importa în fișierul Python folosind:

import requests

Odată ce modulul este pregătit, se poate trece la planificarea structurii jocului. Spre exemplu, se decide că va exista o funcție get_questions() care să preia întrebările de pe Internet și să le transforme într-o listă ușor de folosit, iar o funcție start_trivia() va afișa întrebările, va amesteca răspunsurile, va citi opțiunea utilizatorului și va verifica corectitudinea răspunsurilor. Totul va fi controlat printr-o buclă care parcurge fiecare întrebare, iar scorul va fi actualizat automat. Această etapă asigură că mediul și logica jocului sunt pregătite clar înainte de scrierea codului efectiv.

API-ul folosit este Open Trivia DB, accesibil printr-un URL de genul:

https://opentdb.com/api.php?amount=5&category=9&difficulty=easy&type=multiple

Detalii despre parametri:

  • amount=5 indică numărul total de întrebări
  • category=9 impune categoria întrebărilor (9 = General Knowledge)
  • difficulty=easy setează nivelul de dificultate (easy, medium, hard)
  • type=multiple setează tipul întrebării (multiple = cu mai multe variante, boolean = adevărat/fals).
Programul face o cerere HTTP către acest URL folosind modulul requests, primește răspunsul în format JSON și îl transformă într-o listă de întrebări, fiecare cu varianta corectă și răspunsurile greșite.

Util. Alte tipuri de categorii: 9 – General Knowledge, 10 – Entertainment: Books, 11 – Entertainment: Film, 12 – Entertainment: Music, 14 – Entertainment: Television, 17 – Science & Nature, 18 – Science: Computers, 19 – Science: Mathematics, 21 – Sports, 22 – Geography, 23 – History, 27 – Animals, 28 – Vehicles, 29 – Entertainment: Comics, 30 – Science: Gadgets, 31 – Entertainment: Japanese Anime & Manga, etc. Baza de date are în total 39 de categorii disponibile prin API, fiecare având un cod numeric specific.

Vom crea mai întâi codul minimal, astfel încât să testăm funcționalitatea de bază.

III. Implementare

A treia etapă este implementarea efectivă a jocului, unde ideile și planul devin cod concret. În această fază se scrie codul Python care preia întrebările, le afișează pe rând, combină răspunsurile corecte cu cele greșite, le amestecă și verifică opțiunile introduse de utilizator, calculând scorul final. Tot aici se testează ca totul să funcționeze corect și clar, fără erori.

Iată codul rescris și detaliat, gata de folosit:

import requests # pentru a prelua întrebările de pe Internet
import random # pentru a amesteca variantele de răspuns

def get_questions(amount=5, category=9, difficulty='easy', type='multiple'):
    url = f"https://opentdb.com/api.php?amount={amount}&category={category}&difficulty={difficulty}&type={type}"
    response = requests.get(url)
    data = response.json()
    return data['results']

def start_trivia():
    score = 0 # scorul inițial
    questions = get_questions() # preia întrebările


    # parcurgem fiecare întrebare
    for idx, q in enumerate(questions, 1):
        print(f"\nÎntrebarea {idx}: {q['question']}")
        options = q['incorrect_answers'] + [q['correct_answer']]
        random.shuffle(options)

        for i, option in enumerate(options, 1):
            print(f"{i}. {option}")

        answer = input("Alege varianta corectă (1-4): ")
        if options[int(answer)-1] == q['correct_answer']:
            print("Corect!")
            score += 1
        else:
            print(f"Greșit! Răspunsul corect era: {q['correct_answer']}")

    print(f"\nScor final: {score}/{len(questions)}")

start_trivia()


Codul începe prin a importa două module esențiale. Primul, requests, permite programului să ceară informații de pe Internet, iar al doilea, random, este folosit pentru a amesteca variantele de răspuns, astfel încât răspunsul corect să nu fie niciodată pe aceeași poziție.

Următorul pas este crearea unei funcții care preia întrebările (get_questions). Aceasta construiește o adresă web către API-ul Open Trivia DB, specificând câte întrebări vrem, categoria lor, nivelul de dificultate și tipul întrebării. Programul trimite cererea, primește răspunsul în format JSON și îl transformă într-o structură de date Python, din care extrage doar lista efectivă de întrebări. Fiecare întrebare conține textul ei, varianta corectă și răspunsurile greșite.

Funcția principală a jocului (start_trivia) începe prin inițializarea scorului cu zero și apelarea funcției care preia întrebările. Apoi programul parcurge fiecare întrebare pe rând, afișând textul și combinând răspunsul corect cu cele greșite. Listele de răspunsuri sunt amestecate pentru a crea surpriză și dinamism.

Observație. API-ul trimite pentru fiecare întrebare două tipuri de răspunsuri: unul corect și unul sau mai multe greșite. În răspunsul JSON, răspunsul corect se află în câmpul correct_answer, iar răspunsurile greșite sunt într-o listă numită incorrect_answers. Programul combină aceste două surse pentru a forma lista completă de opțiuni pe care utilizatorul le poate alege. Aceasta permite afișarea tuturor variantelor (lista options) într-un mod clar și apoi amestecarea lor.

După afișarea întrebărilor, programul cere utilizatorului să aleagă varianta corectă, iar imediat verifică răspunsul. Dacă utilizatorul alege corect, scorul crește cu o unitate și se afișează mesajul „Corect!”. Dacă răspunsul este greșit, programul arată varianta corectă. Această secvență se repetă pentru fiecare întrebare din rundă.

Observație. În cod, enumerate este folosit pentru a parcurge lista de întrebări și, în același timp, pentru a ști numărul fiecărei întrebări. Practic, când ai o listă de întrebări, ai nevoie să le afișezi pe rând și să le numerotezi: întrebarea 1, întrebarea 2, întrebarea 3 și așa mai departe. Fără enumerate, dacă parcurgi lista simplu, de exemplu cu for q in questions, programul știe doar care este întrebarea curentă, dar nu știe ce număr să afișeze. Trebuie să ții un contor separat, cu o variabilă care crește la fiecare pas. În limbajul Python, enumerate este o funcție încorporată care ia o listă sau orice alt obiect iterabil și returnează fiecare element împreună cu un index numeric care indică poziția acelui element în listă.

La final, programul afișează scorul total obținut, astfel încât utilizatorul să vadă câte răspunsuri a ghicit corect.

Executăm programul și... să înceapă jocul!



Codul funcționează ca un mini-motor de trivia structurat în trei componente principale: partea responsabilă de apelarea API-ului, partea care gestionează logica jocului și partea care se ocupă de interacțiunea cu utilizatorul. Fiecare componentă își îndeplinește rolul specific, iar prin analizarea fiecărei secțiuni separat se observă că implementarea respectă pași clasici și bine definiți în Python.
IDEI DE EXTINDERE A PROIECTULUI
Iată câteva sugestii pentru a îmbunătăți jocul:

  1. Alegerea numărului de întrebări înainte de a începe jocul.
  2. Alegerea categoriei și apoi dificultatea întrebărilor înainte de a începe runda, oferind astfel mai mult control utilizatorului.
  3. Afișarea scorului parțial după fiecare întrebare, nu doar la final.
  4. Corectarea automată a inputului dacă utilizatorul greșește și tastează ceva nevalid (eroare detectată la testare cu un răspuns invalid).
  5. Folosirea unui mesaj de încurajare sau comentariu după fiecare răspuns, pentru a face jocul mai prietenos.
Pont. A se vizualiza și proiectul [Traducerea automată a textului]. Tare fain ar fi ca întrebările și răspunsurile să fie în limba română!

Concluzii

Jocul realizat în Python este un exemplu clar de cum conceptele învățate la școală, cum ar fi buclele, listele și funcțiile, pot fi aplicate într-un proiect interactiv și distractiv. Elevii pot vedea cum un program simplu poate prelua informații de pe Internet, le poate procesa și apoi transforma într-o experiență de învățare practică.

Pentru elevi, este util să înceapă prin înțelegerea fiecărei părți a codului: cum se preiau întrebările, cum se amestecă răspunsurile și cum se verifică corectitudinea lor. Este recomandat să experimenteze modificând parametri, cum ar fi numărul de întrebări sau categoria, pentru a observa efectele directe în joc. De asemenea, pot încerca să adauge mici îmbunătățiri, cum ar fi afișarea scorului după fiecare întrebare sau personalizarea mesajelor, pentru a exersa creativitatea și logica în programare.

Noțiuni teoretice: variabile, funcții, liste, if, for, import de module

Cuvinte cheie: Python, trivia, joc educativ, cultură generală, Open Trivia DB, programare, elevi, învățare interactivă, API, răspunsuri multiple
Secțiunea s-a terminat.

Cărțile editurii noastre
O parte dintre manualele și culegerile de probleme se găsește și [în format electronic] securizat sub formă de fișier *.pdf.
 home   list  LECȚII   perm_identity   arrow_upward