🐍Pyton🐍 - zadanie z quizem

🐍Pyton🐍 - zadanie z quizem
Photo by Remy_Loz / Unsplash

Zadanie

Quiz o zwierzętach zawiera:

  • wczytywanie/zapisywanie plików z pytaniami
  • funkcje własne
  • klasy

import random
import json
import os


domyslny_kwestionariusz = {
    "Co niezwykłego jest w odchodach wombatów?": [
        ("Są zielone jak trawa", -0.5),
        ("Mają kształt kostki", +1),
        ("Świecą w ciemności", -0.5)
    ],          

    "Jak porusza się kangur, kiedy idzie powoli (nie skacze)?":[
        ("Chodzi wyłącznie na tylnych łapach",-0.5),
        ("Chodzi na czterech łapach jak pies", -0.5),
        ("Opiera się na ogonie jak na trzeciej nodze", +1)
    ],
    
    "Ile może żyć rekin arktyczny (grenlandzki)?": [
        ("Ponad 400 lat", +1),
        ("Około 150 lat",-0.5),
        ("Do 70 lat",-0.5)
                ],
    
    "Dlaczego kapibary są często pokazywane w towarzystwie innych zwierząt?": [
        ("Są niezwykle spokojne i towarzyskie", +1),
        ("Mają zapach, który przyciąga ptaki",-0.5),
        ("Mimo, że są bardzo hałaśliwe, ale lubią dzielić się jedzeniem z innymi gatunkami", -0.5)
                ],
    
    "Dlaczego kuoka nazywana jest „najsłodszym zwierzęciem świata' ": [
        ("Bo wygląda jakby ciągle się uśmiechała",+1),
        ("Bo ma miękkie futro i fioletowy język",-0.5),
        ("Bo daje się głaskać każdemu człowiekowi",-0.5)
                ],

    "Co pomaga panterze śnieżnej przetrwać w zimnym klimacie?": [
        ("Ma specjalne gruczoły ogrzewające krew",-0.5),
        ("Ma bardzo gęste, grube futro i szerokie łapy",+1),
        ("Zapada w sen zimowy na 3 miesiące",-0.5)
                ],
    
    "Dlaczego alpaki często plują?": [
        ("Aby wyrazić niezadowolenie lub pokazać dominację", +1),
        ("Bo to sposób, w jaki się porozumiewają z ludźmi", -0.5)
                ],  
   
    "Co wyróżnia żółwia słoniowego z Galapagos?": [
        ("Potrafi pływać z prędkością 20 km/h", -0.5),
        ("Ma miękki pancerz, który zmienia kolor", -0.5),
        ("Jest jednym z największych żółwi lądowych na świecie", +1)
                ], 

    "Jak słonie indyjskie okazują emocje?": [
        ("Przez dotyk, dźwięki i ruchy trąby", +1),
        ("Przez zmianę koloru skóry", -0.5),
        ("Poprzez machanie uszami w różne strony", -0.5)
                ],
    
    "Ile serc ma ośmiornica?" : [
        ("jedno", -0.5),
        ("osiem", -0.5),
        ("trzy", +1)
                ]
}

plik_kwestionariusz = "kwestionariusz.json"
def wczytaj_lub_utworz_kwestionariusz(sciezka):
    if os.path.exists(sciezka):
        print("Plik kwestionariusza istnieje. Wczytuję dane...")
        with open(sciezka, "r", encoding="utf-8") as plik:
            dane = json.load(plik)
    else:
        print("Plik kwestionariusza nie istnieje. Tworzę nowy plik...")
        dane = domyslny_kwestionariusz
        with open(sciezka, "w", encoding="utf-8") as plik:
            json.dump(dane, plik, ensure_ascii=False, indent=4)
    return dane

# Użycie funkcji
kwestionariusz = wczytaj_lub_utworz_kwestionariusz(plik_kwestionariusz)




class Quiz:
    def __init__(self, kwestionariusz):
        self.kwestionariusz = kwestionariusz  # cały słownik pytań
        self.wynik = 0
        self.wylosowane_pytania = []

    @staticmethod
    def powitanie():
        print("Witaj w quizie o zwierzętach!")

    def zapytanie_o_quiz(self):
        licznosc_quizu = len(self.kwestionariusz)
        while True:
            try:
                liczba_pytan = int(input(f"Podaj liczbę pytań, które chcesz rozwiązać (max: {licznosc_quizu}): "))
                if 0 < liczba_pytan <= licznosc_quizu:
                    self.wylosowane_pytania = random.sample(list(self.kwestionariusz.items()), liczba_pytan)
                    print(f"W takim razie zadamy Ci {liczba_pytan} pytań.")
                    break
                else:
                    print(f"Liczba pytań musi być większa niż 0 i nie większa niż {licznosc_quizu}.")
            except ValueError:
                print("Proszę podać poprawną liczbę.")

    def zadanie_pytania(self):
        for numer, (pytanie_tresc, odpowiedzi) in enumerate(self.wylosowane_pytania, 1):
            print(f"\nPytanie {numer}: {pytanie_tresc}")
            for i, (odp_tresc, _) in enumerate(odpowiedzi, 1):
                print(f"{i}. {odp_tresc}")

            while True:
                try:
                    wybor = int(input("Wybierz numer odpowiedzi: ")) - 1
                    if 0 <= wybor < len(odpowiedzi):
                        punkty = odpowiedzi[wybor][1]
                        self.wynik += punkty
                        break
                    else:
                        print("Niepoprawny numer - spróbuj ponownie.")
                except ValueError:
                    print("Proszę podać liczbę.")

    def pokaz_wynik(self):
        print(f"\nTwój wynik to: {self.wynik} punktów.")

    def dodawanie_pytania(self):
        while True:
            decyzja = input("Czy chcesz dodać nowe pytanie do quizu? Tak/Nie: ").strip().lower()
            if decyzja == 'tak':
                pytanie = input("Wprowadź treść pytania: ")
                odpowiedzi = []
                for i in range(1, 4):
                    odp_tresc = input(f"Wprowadź treść odpowiedzi {i}: ")
                    punkty = float(input(f"Wprowadź punkty za odpowiedź {i} (np. 1.0, -0.5): "))
                    odpowiedzi.append((odp_tresc, punkty))
                self.kwestionariusz[pytanie] = odpowiedzi
                print("Pytanie zostało dodane do quizu.")
            elif decyzja == 'nie':  

                print("Dziękujemy za udział w quizie!")
                break            
            
            else:
                print("Proszę odpowiedzieć 'Tak' lub 'Nie'.")

    def zapisywanie_quizu(self, kwestionariusz: str) -> str:
        czy_zapisac = input("Czy chcesz zapisać kwestionariusz do pliku? Tak/Nie: ").strip().lower()
        if czy_zapisac == 'tak':
            with open('kwestionariusz.json', 'w') as plik:
                json.dump(kwestionariusz, plik, indent=4)
            print("Kwestionariusz został zapisany do pliku kwestionariusz.json.")
        else:
            print("Kwestionariusz nie został zapisany.")
        





# Główna część programu

quiz = Quiz(kwestionariusz)
quiz.powitanie()
quiz.zapytanie_o_quiz()
quiz.zadanie_pytania()
quiz.pokaz_wynik()
quiz.dodawanie_pytania()
quiz.zapisywanie_quizu()