🐍Pyton🐍 - zadanie z quizem
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()