Zadanie - kontakty, aktualizacja quizu

Kontakty z przechowywaniem danych

import json
import os 

if os.path.exists("plik_z_danymi.json"):
    with open("plik_z_danymi.json", "r", encoding="utf8" ) as plik_json:
        kontakty=json.load(plik_json)
else:
    kontakty={}


while True:
    print("""
    Wybierz operację do wykoniania: 
          1 - dopisanie pozycji do ksiązki 
          2 - aktualizacja pozycji książki
          3 - usunięcie pozycji książki 
          4 - wydruk imion z książki 
          5 - wydruk całej książki z kontaktami 
          6 - koniec programu
          """)
    kod = int(input("Podaj kod operacji = "))
    if kod == 1:
        nowe_imie = input("Wpisz nowe imię: ")
        kontakt = input("Wpisz nowe dane kontaktowe: ")
        kontakty[nowe_imie]= kontakt
    elif kod == 2:
        imie = input("Podaj imię/ksywkę osoby do aktualizacji: ")
        if imie in kontakty:
            kontakt = input("Podaj zaktualizowane dane kontaktowae: ")
            kontakty[imie]= kontakt
        else:
            print("Nie ma takiego kontaktu w książce.")
    elif kod == 3:
            imie = input("Kogo chcesz usunąć? ")
            if imie in kontakty:
                del kontakty[imie]
                print(f"Usunięto kontakt: {imie}")
            else:
                print("Nie znaleziono takiego kontaktu.")
    elif kod == 4:
        for imie in kontakty:
            print(imie)
    elif kod == 5:
        print("Książka kontaktowa: ")
        for imie, kontakt in kontakty.items():
            print(imie, "-", kontakt)
    elif kod == 6:
        odp = input("Czy chcesz zapisać dane" )
        if odp == "Tak":
            with open("plik_z_danymi.json", "w") as plik_json:
                json.dump(kontakty, plik_json)
            break
        elif odp == "Nie":
            break
    else:
        print("Podaj numer opreracji ponownie")
        kod = int(input("Podaj kod operacji = "))

Zaktualizowany quiz

import random
import json


with open("pytania.json", "r", encoding="utf-8") as f:
    kwestionariusz = json.load(f)

while True:
    print("""
    Wybierz operację do wykoniania: 
          1 - dodaj pytanie
          2 - rozpocznij quiz
          3 - koniec programu
          """)
    kod = int(input("Podaj kod operacji = "))
    if kod == 1:
        pytanie = input("Podaj treść nowego pytania: ")
        odpowiedzi = []
        for i in range(3):
            odp = input(f"Podaj {i+1}. odpowiedz: ")
            punkty_odp = input("Podaj czy odpowiedz jest poprawna (P/F): ")
            if punkty_odp == "P":
                punkty_odp = 1
            elif punkty_odp == "F":
                punkty_odp = -0.5
            else:
                punkty_odp =input("Błąd! Wpisz 'P' - prawda lub 'F' - fałsz: ")
            odpowiedzi.append([odp, punkty_odp])
        kwestionariusz[pytanie] = odpowiedzi
        with open("pytania.json", "w", encoding="utf8") as plik_json:
            json.dump(
            kwestionariusz,
            plik_json,
            indent=2,
            sort_keys=True,
            ensure_ascii=False,
            )
    elif kod == 2:
        punkty = 0
        for pytanie, warianty in kwestionariusz.items():
            print(pytanie)
            random.shuffle(warianty)
            for indeks, wariant in enumerate( warianty, start=1):
                print(indeks, ". ", wariant[0])
            wybor_gracza = input("Twoj wybor: ")    
            while wybor_gracza not in ("1", "2", "3"):
                print("Zly nr odpowiedzi. Wpisz cos z zakresu 1-3")
                wybor_gracza = input("Twoj wybor: ")
            indeks_odp = int(wybor_gracza)-1
            punkty += warianty[indeks_odp][1]
            print("Twoje aktualne pkt. to:", punkty)

    elif kod == 3:
        break

    else:
        print("Podaj numer opreracji ponownie")
        kod = int(input("Podaj kod operacji = "))

Pytania, odpowiedzi, punkty z pliku json

{
  "Co robi heterodon, gdy czuje się zagrożony?": [
    [
      "Syczy i udaje, że atakuje, a jeśli to nie działa udaje martwego",
      1
    ],
    [
      "Atakuje, aż odstraszy zagrożenie",
      -0.5
    ],
    [
      "Skacze w kierunku napastnika",
      -0.5
    ]
  ],
  "Co robi pyton królewski, gdy czuje się zagrożony?": [
    [
      "Głośno syczy i atakuje natychmiast",
      -0.5
    ],
    [
      "Zwija się w kulkę, chowając głowę w środku",
      1
    ],
    [
      "Zrzuca skórę, żeby zmylić przeciwnika ",
      -0.5
    ]
  ],
  "Dlaczego czarna mamba nazywa się 'czarna'?": [
    [
      "Bo ma całe czarne ciało",
      -0.5
    ],
    [
      "Bo wnętrze jej paszczy jest czarne",
      1
    ],
    [
      "Bo to kolor jej jadu",
      -0.5
    ]
  ],
  "Ile powiek mają węże?": [
    [
      "Jedną",
      -0.5
    ],
    [
      "Dwie",
      -0.5
    ],
    [
      "Nie mają powiek ",
      1
    ]
  ],
  "Jak węże 'czują' zapachy?": [
    [
      "Nie czują",
      -0.5
    ],
    [
      "Nosem",
      -0.5
    ],
    [
      "Językiem",
      1
    ]
  ],
  "Jak węże odbierają dźwięki?": [
    [
      "Mają uszy zewnętrzne jak ssaki",
      -0.5
    ],
    [
      "Nie słyszą w ogóle",
      0,
      5
    ],
    [
      "Odbierają wibracje przez ciało i ucho wewnętrzne",
      1
    ]
  ],
  "Jak węże są w stanie połknąć zdobycz w całość?": [
    [
      "Ich szczęki są zbudowane z elastycznych więzadeł, które pozwalają im się rozszerzać ",
      1
    ],
    [
      "Potrafią 'wyłamać' swoją szczękę, by zrobić więcej miejsca",
      -0.5
    ],
    [
      "Ich szczęki są bardzo siline ",
      -0.5
    ]
  ],
  "Jaki wąż jest najdłuższy?": [
    [
      "Pyton siatkowy",
      1
    ],
    [
      "Kobra",
      -0.5
    ],
    [
      "Pyton królewski",
      -0.5
    ]
  ],
  "Jaki wąż jest uznawany za największego?": [
    [
      "Pyton siatkowy",
      -0.5
    ],
    [
      "Anakonda zielona",
      1
    ],
    [
      "Kobra królewska",
      -0.5
    ]
  ],
  "Po co wielu wężom intensywne lub kontrastowe ubarwienie?": [
    [
      "Aby przyciągać partnera",
      -0.5
    ],
    [
      "Aby odstraszać drapieżniki, sygnalizując, że są jadowite",
      1
    ],
    [
      "Aby wtopić się w tło",
      -0.5
    ]
  ]
}