Rozbudowany Kwestionariusz
Rozbudowałam Kwestionariusz o możliwość wyboru kategorii (Zwierzęta, Geografia, Programowanie) a następnie poziomu trudności (łatwy, średni, trudny). Przez dodanie tych funkcjonalności musiałam nieco przebudować cały kod dlatego mocniej "odstaje" od poprzedniego. Zachowałam funkcjonalność mieszania pytań i odpowiedzi. Przy tym, po każdej odpowiedzi - pokazuje czy odpowiedź była poprawna czy nie, oraz jakie mamy saldo punktów. Na końcu oblicza wynik oraz zwraca go w procentach - i na tej podstawie zwraca komunikat użytkownikowi.
Kwestionariusz:
import random
class Quiz:
def __init__(self):
self.punkty = 0
self.imie = ""
# Baza pytań - teraz bogatsza i lepiej zorganizowana
self.baza_pytan = {
# baza pytań w sekcji "Baza Pytań" by nie robić zamieszania
}
def rozpocznij(self):
print("Witaj w moim Quizzie wiedzy ogólnej!")
print("Quiz jest podzielony na poziomy trudności oraz kategorie")
print("Oto zasady:")
print("\u2022 Za poprawną odpowiedź +1 punkt")
print("\u2022 Za błędną odpowiedź -0.5 punktu\n")
self.imie = input("Podaj swoje imię: ").strip() or "Gracz"
# Wybór kategorii
print("\nWybierz jedną lub więcej kategorii:")
kategorie = list(self.baza_pytan.keys()) # pobranie nazw kategorii (wszystkie klucze ze słownika)
for i, kategoria in enumerate(kategorie, 1): # połączenie indeksów (począwszy od 1) i elementów do każdej kategorii
print(f"{i}.{kategoria}")
wybrane_kategorie = []
while not wybrane_kategorie:
wybrane = input("\nWpisz numery kategorii (np. '1 2 3'): ")
if wybrane.lower() == 'wszystkie':
wybrane_kategorie = kategorie.copy()
else:
try:
wybrane_kategorie = [kategorie[int(i)-1] for i in wybrane.split()]
except:
print("Niepoprawny wybór. Wybierz spośród numerów: 1, 2, 3.")
# wybór poziomu trudności
print("\nWybierz poziom trudności:")
print("1. Łatwy")
print("2. Średni")
print("3. Trudny")
poziom = ""
while poziom not in ["łatwe", "średnie", "trudne"]:
wybrane = input("Wybierz poziom trudności (1-3): ").strip()
if wybrane == "1":
poziom = "łatwe"
elif wybrane == "2":
poziom = "średnie"
elif wybrane == "3":
poziom = "trudne"
else:
"Nieprawidłowy wybór. Wybierz 1, 2 lub 3."
#pytania:
pytania = []
for kategoria in wybrane_kategorie:
pytania.extend(self.baza_pytan[kategoria][poziom])
random.shuffle(pytania)
liczba_pytan = min(10, len(pytania)) #ucina do 10 pytań, niezależnie od ilości wybranych kategorii
print(f"\nStart Quizu! ({', '.join(wybrane_kategorie)} - poziom {poziom})")
for i, pytanie in enumerate(pytania[:liczba_pytan],1):
print(f"\n{i}. {pytanie['pytanie']}\n") # treść pytania z całego słownika
#mieszanie odpowiedzi
odpowiedzi = pytanie['odpowiedzi'].copy()
random.shuffle(odpowiedzi)
poprawna_odp = pytanie['odpowiedzi'][pytanie['poprawna']]
poprawna_odp_index = odpowiedzi.index(poprawna_odp)
for j, odp in enumerate(odpowiedzi,1):
print(f"{j}. {odp}") # lista stringów
#return odpowiedzi - źle
wybor = input("\nPodaj odpowiedź (1-3): ")
while wybor not in ["1", "2", "3"]:
wybor = input("Niepoprawny wybór odpowiedzi. Wybierz 1, 2 lub 3: ")
if int(wybor)-1 == poprawna_odp_index:
self.punkty += 1
print("Poprawna odpowiedź.")
else:
self.punkty -= 0.5
print(f"Błędna odpowiedź. Poprawna odpowiedź to: {poprawna_odp}")
print(f"Wynik: {self.punkty} pkt.")
# koniec quizu
wynik_procent = (self.punkty/liczba_pytan) * 100
print(f"{self.imie}, wynik: {self.punkty} pkt = {wynik_procent} %")
if wynik_procent == 100:
print("Brawo! Zdobyłeś maksymalną ilość punktów!🥇")
elif wynik_procent >=80:
print("Świetnie Ci poszło! Prawie bezbłędnie!🥈")
elif wynik_procent >= 60:
print("Jest dobrze ale mogłoby być lepiej...")
elif wynik_procent >= 40:
print("Otrzymałeś przeciętny wynik. Czas na powtórkę!")
elif wynik_procent >= 20:
print("Naprawdę kiepsko...")
else:
print("Katastrofa. Chyba nie jesteś dobrym strzelcem...")
quiz = Quiz()
quiz.rozpocznij()
Baza Pytań:
# Baza pytań - teraz bogatsza i lepiej zorganizowana
self.baza_pytan = {
"Zwierzęta": {
"łatwe": [
{
"pytanie": "Które zwierzę jest najszybszym lądowym ssakiem?",
"odpowiedzi": ["Antylopa", "Gepard", "Struś"],
"poprawna": 1
},
{
"pytanie": "Jakie zwierzę jest znane z tego, że potrafi wytwarzać jedwab?",
"odpowiedzi": ["Pająk", "Motyl", "Gąsienica jedwabnika"],
"poprawna": 2
},
{
"pytanie": "Które zwierzę ma największą ilość zębów?",
"odpowiedzi": ["Krokodyl", "Rekin", "Wieloryb"],
"poprawna": 0
},
{
"pytanie": "Które zwierzę ma skrzela?",
"odpowiedzi": ["Kos", "Słowik", "Foka"],
"poprawna": 0
},
{
"pytanie": "Który ptak nie potrafi latać, ale jest jednym z najszybszych biegaczy?",
"odpowiedzi": ["Struś afrykański", "Nandu południowoamerykański", "Emu australijski"],
"poprawna": 0
},
{
"pytanie": "Które zwierzę posiada najtwardszą skorupę wśród zwierząt lądowych?",
"odpowiedzi": ["Żółw pustynny", "Krab kokosowy", "Żółw morski"],
"poprawna": 0
},
{
"pytanie": "Jakie zwierzę jest znane z tego, że potrafi wykrywać trzęsienia ziemi?",
"odpowiedzi": ["Pies domowy", "Słoń afrykański", "Kret europejski"],
"poprawna": 1
},
{
"pytanie": "Które zwierzę potrafi odgryzać swoje ogony, by uciec drapieżnikowi?",
"odpowiedzi": ["Wąż zbożowy", "Jaszczurka zielona", "Salamandra plamista"],
"poprawna": 1
}
],
"średnie": [
{
"pytanie": "Które zwierzę ma największe oczy spośród ssaków?",
"odpowiedzi": ["Sowa śnieżna", "Szakal pręgowany", "Słoń afrykański"],
"poprawna": 1
},
{
"pytanie": "Które zwierzę potrafi przeżyć hibernację przez kilka miesięcy, zwalniając całkowicie swoje funkcje życiowe?",
"odpowiedzi": ["Wąż zbożowy", "Niedźwiedź", "Świstak"],
"poprawna": 2
},
{
"pytanie": "Które zwierzę jest znane z bardzo długiej żywotności, przekraczającej 100 lat?",
"odpowiedzi": ["Papuga kakadu", "Rekin wielorybi", "Żółw olbrzymi z Galapagos"],
"poprawna": 2
},
{
"pytanie": "Jaki gatunek zwierzęcia ma największe serce w stosunku do masy ciała?",
"odpowiedzi": ["Mysz polna", "Koliber", "Kot"],
"poprawna": 0
},
{
"pytanie": "Które zwierzę ma język dłuższy niż całe jego ciało?",
"odpowiedzi": ["Żaba drzewna", "Mrówkojad", "Kameleon"],
"poprawna": 1
},
{
"pytanie": "Które zwierzę wytwarza najbardziej trujący jad spośród ssaków?",
"odpowiedzi": ["Kret ziemny", "Kolczatka australijska", "Dziobak"],
"poprawna": 2
},
{
"pytanie": "Które zwierzę słynie z najdłuższej migracji wśród ptaków?",
"odpowiedzi": ["Jaskółka", "Bocian biały", "Albatros wędrowny"],
"poprawna": 0
},
{
"pytanie": "Które zwierzę jest znane z tego, że potrafi widzieć ultrafioletowe światło, niewidoczne dla ludzi?",
"odpowiedzi": ["Nietoperz", "Pies", "Motyl"],
"poprawna": 2
}
],
"trudne": [
{
"pytanie": "Które zwierzę ma największe oczy w stosunku do wielkości ciała?",
"odpowiedzi": ["Humbak", "Kałamarnica olbrzymia", "Kiwaczek leśny"],
"poprawna": 1
},
{
"pytanie": "Jakie zwierzę jest znane z najdłuższego okresu snu (hibernacji) bez przerwy, trwającego nawet do 7 lat?",
"odpowiedzi": ["Świstak górski", "Żaba Wooda", "Ślimak z gatunku Melanopsis"],
"poprawna": 1
},
{
"pytanie": "Jakie zwierzę posiada największą różnorodność chromosomów (liczba chromosomów u jednego gatunku)?",
"odpowiedzi": ["Mrówka Saharaensis", "Człowiek (Homo sapiens)", "Węgorz elektryczny"],
"poprawna": 0
},
{
"pytanie": "Które zwierzę ma najdłuższą żywotność znaną wśród kręgowców?",
"odpowiedzi": ["Rekin grenlandzki", "Żółw olbrzymi z Galapagos", "Wieloryb grenlandzki"],
"poprawna": 0
},
{
"pytanie": "Które zwierzę jest jedynym znanym gatunkiem zdolnym do regeneracji całkowicie utraconych kończyn?",
"odpowiedzi": ["Gekon", "Kameleon zwyczajny", "Salamandra plamista"],
"poprawna": 0
},
{
"pytanie": "Które zwierzę potrafi zmieniać kolor skóry najszybciej?",
"odpowiedzi": ["Kameleon jemeński", "Ośmiornica zwyczajna", "Płaszczka"],
"poprawna": 1
},
{
"pytanie": "Które zwierzę jest najbardziej jadowitym wężem na świecie?",
"odpowiedzi": ["Mamba czarna", "Kobra królewska", "Tajpan pustynny"],
"poprawna": 2
},
{
"pytanie": "Które zwierzę posiada najsilniejszy zmierzony uścisk szczęki na świecie?",
"odpowiedzi": ["Lew afrykański", "Orka (wieloryb zabójca)", "Krokodyl nilowy"],
"poprawna": 2
}
]
},
"Geografia": {
"łatwe": [
{
"pytanie": "Które z tych miast jest stolicą Australii?",
"odpowiedzi": ["Sydney", "Canberra", "Melbourne"],
"poprawna": 1
},
{
"pytanie": "Jakie morze leży pomiędzy Włochami a Chorwacją?",
"odpowiedzi": ["Morze Adriatyckie", "Morze Jońskie", "Morze Egejskie"],
"poprawna": 0
},
{
"pytanie": "Który kontynent jest najmniejszy pod względem powierzchni?",
"odpowiedzi": ["Australia", "Antarktyda", "Ameryka Południowa"],
"poprawna": 0
},
{
"pytanie": "W jakim kraju leży piramida Cheopsa?",
"odpowiedzi": ["Egipt", "Sudan", "Libia"],
"poprawna": 0
},
{
"pytanie": "Jakie państwo ma największą powierzchnię na świecie?",
"odpowiedzi": ["Stany Zjednoczone", "Rosja", "Chiny"],
"poprawna": 1
},
{
"pytanie": "Jak nazywa się najdłuższa rzeka w Polsce?",
"odpowiedzi": ["Wisła", "Warta", "Odra"],
"poprawna": 0
},
{
"pytanie": "Które państwo leży na Półwyspie Iberyjskim?",
"odpowiedzi": ["Hiszpania", "Włochy", "Grecja"],
"poprawna": 0
},
{
"pytanie": "Które miasto jest stolicą Kanady?",
"odpowiedzi": ["Toronto", "Vancouver", "Ottawa"],
"poprawna": 2
}
],
"średnie": [
{
"pytanie": "Jakie jest najwyżej położone stale zamieszkane miasto na świecie?",
"odpowiedzi": ["La Rinconada – Peru", "Lhasa - Tybet", "El Ato - Boliwia"],
"poprawna": 0
},
{
"pytanie": "W którym kraju znajduje się najwięcej jezior na świecie?",
"odpowiedzi": ["Kanada", "Rosja", "Stany Zjednoczone"],
"poprawna": 0
},
{
"pytanie": "Jak nazywa się największa wyspa świata, która nie jest kontynentem?",
"odpowiedzi": ["Nowa Gwinea", "Grenlandia", "Australia"],
"poprawna": 1
},
{
"pytanie": "Która rzeka jest najdłuższa w Europie?",
"odpowiedzi": ["Dniepr", "Dunaj", "Wołga"],
"poprawna": 2
},
{
"pytanie": "W jakim kraju znajduje się największy wulkan świata (Mauna Loa)?",
"odpowiedzi": ["Indonezja", "Stany Zjednoczone (Hawaje)", "Papua-Nowa Gwinea"],
"poprawna": 1
},
{
"pytanie": "Jakie jest najwyższe pasmo górskie w Afryce?",
"odpowiedzi": ["Góry Kilimandżaro", "Góry Smocze", "Góry Atlas"],
"poprawna": 0
},
{
"pytanie": "Które z państw leży jednocześnie na dwóch kontynentach, ale cała jego stolica znajduje się po stronie azjatyckiej?",
"odpowiedzi": ["Turcja", "Rosja", "Egipt"],
"poprawna": 0 # innym państwem który spełnia ten warunek jest Kazachstan (Astana/Nur-Sułtan)
},
{
"pytanie": "Na jakim kontynencie leży jezioro Bajkał?",
"odpowiedzi": ["Azja", "Europa", "Ameryka Południowa"],
"poprawna": 0
}
],
"trudne": [
{
"pytanie": "Które jezioro jest najstarsze na świecie?",
"odpowiedzi": ["Jezioro Bajkał", "Jezioro Tanganika", "Jezioro Wiktorii"],
"poprawna": 0
},
{
"pytanie": "Jaka jest największa depresja (najniżej położony punkt) na lądzie poza obszarem mórz i oceanów?",
"odpowiedzi": ["Dolina Jordanu", "Dolina Śmierci", "Basen Turfa"],
"poprawna": 2
},
{
"pytanie": "Która stolica jest położona na największej wysokości nad poziomem morzaw?",
"odpowiedzi": ["La Paz (Boliwia)", "Quito (Ekwador)", "Thimphu (Bhutan)"],
"poprawna": 0
},
{
"pytanie": "Jaki jest oficjalny najwyższy szczyt Antarktydy i jaka jest jego wysokość?",
"odpowiedzi": ["Mount Vinson – 4 892 m",
"Mount Erebus – 3 794 m",
"Mount Sidley – 4 285 m"],
"poprawna": 0
},
{
"pytanie": "Które państwo ma najwięcej wysp na świecie?",
"odpowiedzi": ["Szwecja", "Chiny", "Stany Zjednoczone"],
"poprawna": 0
},
{
"pytanie": "Jaki jest najdłuższy na świecie system jaskiń?",
"odpowiedzi": ["Mammoth Cave – USA", "Sistema Sac Actun – Meksyk", "Krubera - Gruzja"],
"poprawna": 0
},
{
"pytanie": "W którym kraju znajduje się najwyższy na świecie wodospad?",
"odpowiedzi": ["Wenezuela", "Zambia", "Norwegia"],
"poprawna": 0
},
{
"pytanie": "Które morze ma największą zasolenie?",
"odpowiedzi": ["Morze Martwe", "Morze Czerwone", "Morze Karaibskie"],
"poprawna": 0
}
]
},
"Programowanie": {
"łatwe": [
{
"pytanie": "Co oznacza skrót IDE w programowaniu?",
"odpowiedzi": ["Integrated Development Environment",
"Internal Data Execution",
"Internet Data Exchange"],
"poprawna": 0
},
{
"pytanie": "Jaką instrukcję używamy, by wypisać tekst na ekran w Pythonie?",
"odpowiedzi": ["print()",
"write()",
"output()"],
"poprawna": 0
},
{
"pytanie": "Jakiego znaku używa się do komentowania pojedynczej linii w Pythonie?",
"odpowiedzi": ["#", "//", "/*"],
"poprawna": 0
},
{
"pytanie": "Co oznacza pojęcie „syntax error”?",
"odpowiedzi": ["Błąd w składni kodu, który uniemożliwia jego wykonanie",
"Błąd logiczny w działaniu programu",
"Komentarz w kodzie"],
"poprawna": 0
},
{
"pytanie": "Co zwróci wyrażenie Python.lower()",
"odpowiedzi": ["python", "PYTHON", "Python"],
"poprawna": 0
},
{
"pytanie": "Jakiego typu danych zwraca funkcja enumerate()?",
"odpowiedzi": ["Iterator zwracający krotki (indeks, wartość)",
"Listę wartości",
"Słownik indeksów i wartości"],
"poprawna": 0
},
{
"pytanie": "Co oznacza __init__ w definicji klasy w Pythonie?",
"odpowiedzi": ["Metodę inicjalizującą nowo utworzony obiekt klasy",
"Metodę wywoływaną przy usuwaniu obiektu",
"Metodę definiującą zachowanie obiektu przy wywołaniu funkcji"],
"poprawna": 0
},
{
"pytanie": "Jaki operator służy do łączenia (konkatenacji) stringów?",
"odpowiedzi": ["+", "*", "/"],
"poprawna": 0
}
],
"średnie": [
{
"pytanie": "Co oznacza, że Python jest językiem interpretowanym?",
"odpowiedzi": ["Kod jest wykonywany linia po linii przez interpreter, bez konieczności kompilacji",
"Kod jest wykonywany bezpośrednio przez procesor bez pośrednictwa interpretera",
"Kod jest kompilowany do pliku wykonywalnego przed uruchomieniem"],
"poprawna": 0
},
{
"pytanie": "Jaka jest różnica między listą a słownikiem w Pythonie?",
"odpowiedzi": ["Lista przechowuje elementy w kolejności, słownik w parach klucz-wartość bez gwarancji kolejności",
"Lista może mieć tylko liczby, słownik tylko teksty",
"Słownik jest typem niemodyfikowalnym (immutable), lista jest modyfikowalna (mutable)"],
"poprawna": 0
},
{
"pytanie": "Co oznacza wyjątek (exception) w Pythonie?",
"odpowiedzi": ["Błąd, który występuje podczas wykonywania programu i może być obsłużony przez programistę",
"Sposób na przyspieszenie działania programu",
"Nowa zmienna deklarowana dynamicznie w programie"],
"poprawna": 0
},
{
"pytanie": "Jaki jest efekt wywołania metody append() na liście w Pythonie?",
"odpowiedzi": ["Dodaje pojedynczy element na koniec listy, modyfikując ją w miejscu",
"Tworzy nową listę z dodanym elementem, pozostawiając oryginał bez zmian",
"Usuwa pierwszy element listy i dodaje nowy na koniec"],
"poprawna": 0
},
{
"pytanie": "Co oznacza, że zmienna jest “lokalna” w funkcji?",
"odpowiedzi": ["Jest dostępna tylko w obrębie tej funkcji i przestaje istnieć po jej zakończeniu",
"Może być używana w całym programie, ale jest zdefiniowana w funkcji",
"Jest zmienną globalną z ograniczoną widocznością"],
"poprawna": 0
},
{
"pytanie": "Co zwróci wyrażenie bool([]) w Pythonie?",
"odpowiedzi": ["False (pusta lista jest traktowana jako fałsz)",
"True (każda zmienna ma wartość prawdy)",
"Zwróci błąd"],
"poprawna": 0
},
{
"pytanie": "Co to jest wyjątek w programowaniu?",
"odpowiedzi": ["Błąd lub zdarzenie, które przerywa normalny przebieg programu, ale można je obsłużyć",
"Nowy typ zmiennej przechowujący dane wejściowe użytkownika",
"Specjalna funkcja, która automatycznie poprawia błędy w kodzie"],
"poprawna": 0
},
{
"pytanie": "Co oznacza termin „mutable” w kontekście typów danych?",
"odpowiedzi": ["Obiekt, którego zawartość można zmieniać po jego utworzeniu",
"Obiekt, który nie może być skopiowany",
"Obiekt, który może zmieniać swój typ podczas działania programu"],
"poprawna": 0
}
],
"trudne": [
{
"pytanie": "Co w Pythonie oznacza pojęcie immutability (niemodyfikowalności) i które typy danych są tego przykładem?",
"odpowiedzi": ["Obiekty, których wartość nie może być zmieniona po utworzeniu, np. tuple i string",
"Obiekty, które można kopiować bez zmiany oryginału",
"Możliwość zmiany wartości po utworzeniu obiektu"],
"poprawna": 0
},
{
"pytanie": "Jakie jest podstawowe zastosowanie funkcji lambda w Pythonie?",
"odpowiedzi": ["Definiowanie krótkich funkcji anonimowych, zwykle jednowierszowych",
"Tworzenie modułów",
"Tworzenie klas dynamicznie"],
"poprawna": 0
},
{
"pytanie": "Czym jest i do czego służy virtual environment (środowisko wirtualne) w Pythonie?",
"odpowiedzi": ["Izolowanym środowiskiem, które pozwala na instalowanie pakietów bez wpływu na system globalny",
"Programem do zarządzania pamięcią",
"Specjalnym typem pliku wykonywalnego"],
"poprawna": 0
},
{
"pytanie": "Jaka jest różnica między listą a krotką (tuple) w Pythonie?",
"odpowiedzi": ["Lista jest zmienialna (mutable), a krotka niezmienialna (immutable)",
"Krotka jest typem globalnym, lista lokalnym",
"Krotka jest zmienialna (mutable), a lista niezmienialna (immutable)"],
"poprawna": 0
},
{
"pytanie": "Czym jest metaklasa w Pythonie i jakie jest jej główne zastosowanie?",
"odpowiedzi": ["Klasa tworząca inne klasy, kontrolująca ich sposób tworzenia",
"Klasa, która dziedziczy po klasie bazowej",
"Klasa służąca do serializacji danych"],
"poprawna": 0
},
{
"pytanie": "Jak działa garbage collector w Pythonie i jaka jest różnica między referencyjnym zliczaniem a cyklicznym zbieraniem śmieci?",
"odpowiedzi": ["Referencyjne zliczanie usuwa obiekty, gdy liczba ich referencji spadnie do zera, a cykliczne zbieranie wykrywa i usuwa obiekty tworzące cykle referencji",
"Garbage collector działa tylko na listach i słownikach",
"Garbage collector usuwa obiekty natychmiast po ich użyciu"],
"poprawna": 0
},
{
"pytanie": "Jaka jest różnica między programowaniem synchronicznym a asynchronicznym?",
"odpowiedzi": ["Synchroniczne czeka na zakończenie operacji, asynchroniczne pozwala wykonywać inne zadania równolegle",
"Synchroniczne to programowanie w Pythonie, asynchroniczne w Javie",
"Synchroniczne oznacza powolne działanie programu, asynchroniczne szybkie"],
"poprawna": 0
},
{
"pytanie": "Co oznacza termin „immutability” i jakie ma znaczenie w programowaniu funkcyjnym?",
"odpowiedzi": ["Obiekty niezmienne, co ułatwia uniknięcie błędów związanych z modyfikacją danych",
"Obiekty zawsze zmieniające się podczas działania programu",
"Obiekty, które nie mogą być użyte w programie"],
"poprawna": 0
}
]
}
}