Python - kwestionariusz (praca domowa, po 5tej lekcji)

Python - kwestionariusz (praca domowa, po 5tej lekcji)
Photo by JESHOOTS.COM / Unsplash

`import random
kwestionariusz = {
"Jak węże 'czują' zapachy?" : [
("a. Nie czują", -0.5),
("b. Nosem", -0.5),
("c. Językiem", 1)
],
"Jaki wąż jest najdłuższy?" : [
("a. Pyton siatkowy", 1),
("b. Kobra", -0.5),
("c. Pyton królewski", -0.5)
],
"Ile liter 'a' jest w tym pytaniu?" : [
("a. 1", -0.5),
("b. 2", 1),
("c. 3", -0.5)
],
}

"""
Baza - użyj pętli do wyświetlenia pytań.
Użyj pętli for żeby wyświetlić użytkownikowi pytania i możliwe warianty odpowiedzi.

Krok 1 - dodaj losową kolejność odpowiedzi
Skorzystaj z modułu random i funkcji shuffle do przemieszania kolejności odpowiedzi. Jeśli masz nr /
literkę odpowiedzi dodaną w niej (tak jak na powyższym przykładzie) - na razie nie przejmuj się tym.
Na tym etapie jeszcze nie liczymy też pkt. - zajmujemy się jedynie wyświetleniam zawartości.

Co dalej?
Dążymy do tego, żeby w pętli obsłużyć też zliczanie punktów. Jakie kłopoty na tym etapie widzę?
• jeśli pomieszam kolejność odpowiedzi to jak przypisywać to co wpisał użytkownik z punktacją
(czyli np. “a” nie będzie już na pierwszej pozycji tylko np. na trzeciej - co z tym zrobić)?
• co zrobić żeby “pomieszać” też pytania?
• dobrze by było na początku poprosić użytkownika o imię etc. Jakiej struktury danych do tego
moglibyśmy użyć?

"""
punkty = 0

imie_uzytkownika = input("Wprowadz swoje imie: ").strip().lower()
print(f"Witaj, {imie_uzytkownika.capitalize()}.")
print("Tylko jedna odpowiedz w kazdym z pytan jest poprawna.")
print("Poprawna odpowiedź: +1 punkt, niepoprawna: -0.5 punktu.\n")
for pytanie, odpowiedzi in kwestionariusz.items():
print(pytanie)

# losuj kolejność odpowiedzi:
odpowiedzi_copy = odpowiedzi[:] # tworzy nową listę z tymi samymi elementami
random.shuffle(odpowiedzi_copy)
poprawna_litera = None
for odp in odpowiedzi_copy:
    print(odp[0])
    prawidlowa_odp = odp[1] == 1
    if prawidlowa_odp:
        poprawna_litera = odp[0][0].lower()

while True:
    odpowiedz_uzytkownika = input("Wpisz odpowiedz: a, b lub c.:" ).strip().lower()
    if odpowiedz_uzytkownika not in ["a", "b", "c"]:
        print("Nieprawidlowy znak. Wpisz a, b lub c.")
        continue
    elif odpowiedz_uzytkownika == poprawna_litera:
        print("Dobra odpowiedz! Dostajesz 1 punkt!")
        punkty +=1
        break
    else:
        print(f"Zła odpowiedz!  Poprawna to: {poprawna_litera}.  Tracisz 0.5 punktu.")
        punkty -= 0.5
        break

print(f"Twoj koncowy wynik: {punkty} punktow.")`