Kwestionariusz - rozbudowana wersja

Kwestionariusz - rozbudowana wersja
Photo by Nguyen Dang Hoang Nhu / Unsplash
  • mieszanie pytań i odpowiedzi
  • pozbycie się w odpowiedzi z krotki stringa a, b, c i zostawienie tylko numeracji odpowiedzi
  • zapisanie kwestionariusza do pliku w formacie json jesli nie istnieje (w folderze o nazwie data)
  • listowanie plików z katalogu data
  • zliczanie punktów
import random
import os
import json

kwestionariusz = {
"Jak w Pythonie deklaruje się zmienną?" : [
("a. int x = 5", -0.5),
("b. x = 5", 1),
("c. var x = 5", -0.5)
],
"Jakiego typu będzie wynik wyrażenia: 3 / 2 w Pythonie 3?" : [
("a. int", -0.5),
("b. float", 1),
("c. decimal", -0.5)
],
"Co zwróci len('Python')?" : [
("a. 5", -0.5),
("b. 6", 1),
("c. 7", -0.5)
],
"Jak w Pythonie zapisuje się komentarz jednolinijkowy?" : [
("a. // komentarz", -0.5),
("b. # komentarz", 1),
("c. <!-- komentarz -->", -0.5)
],
"Co zwróci wyrażenie: bool('')?" : [
("a. True", -0.5),
("b. False", 1),
("c. None", -0.5)
],
"Jak utworzyć listę w Pythonie?" : [
("a. lista = (1, 2, 3)", -0.5),
("b. lista = [1, 2, 3]", 1),
("c. lista = {1, 2, 3}", -0.5)
],
"Jak połączyć listę elementów w jeden string (bez separatora)?" : [
("a. ''.join(lista)", 1),
("b. lista.join('')", -0.5),
("c. concat(lista)", -0.5)
],
"Jak w Pythonie sprawdzić typ zmiennej x?" : [
("a. typeof(x)", -0.5),
("b. type(x)", 1),
("c. gettype(x)", -0.5)
],
"Jak w Pythonie zrobić pętlę po liczbach od 0 do 4?" : [
("a. for i in range(5):", 1),
("b. for i in range(0,4):", -0.5),
("c. for i in 0..4:", -0.5)
],
"Co zwróci 5 == 5.0?" : [
("a. True", 1),
("b. False", -0.5),
("c. Error", -0.5)
],
"Jak w Pythonie obsłużyć wyjątek?" : [
("a. try/except", 1),
("b. try/catch", -0.5),
("c. catch/except", -0.5)
],
"Co robi funkcja enumerate(lista)?" : [
("a. Zwraca indeks i element", 1),
("b. Zwraca tylko elementy", -0.5),
("c. Zwraca tylko indeksy", -0.5)
],
"Jak utworzyć słownik w Pythonie?" : [
("a. dict = {'a': 1, 'b': 2}", 1),
("b. dict = ['a': 1, 'b': 2]", -0.5),
("c. dict = ('a': 1, 'b': 2)", -0.5)
],
"Co zwróci 'Python'[1]?" : [
("a. P", -0.5),
("b. y", 1),
("c. t", -0.5)
],
"Jak w Pythonie sprawdzić, czy 'kot' jest w liście zwierzeta?" : [
("a. if 'kot' in zwierzeta:", 1),
("b. if zwierzeta.has('kot'):", -0.5),
("c. if 'kot' exists in zwierzeta:", -0.5)
],
"Co zwróci lista[::-1]?" : [
("a. Odwróconą listę", 1),
("b. Pierwszy element listy", -0.5),
("c. Listę bez pierwszego elementu", -0.5)
],
"Jak w Pythonie definiuje się funkcję?" : [
("a. function nazwa():", -0.5),
("b. def nazwa():", 1),
("c. func nazwa():", -0.5)
],
"Jak sprawdzić długość listy o nazwie dane?" : [
("a. length(dane)", -0.5),
("b. len(dane)", 1),
("c. size(dane)", -0.5)
],
"Jak w Pythonie utworzyć pusty zbiór (set)?" : [
("a. set()", 1),
("b. {}", -0.5),
("c. []", -0.5)
],
"Co oznacza konstrukcja if __name__ == '__main__': ?" : [
("a. Uruchamia kod tylko przy imporcie modułu", -0.5),
("b. Uruchamia kod tylko gdy plik jest wykonywany bezpośrednio", 1),
("c. Jest komentarzem", -0.5)
],
"Co zwróci 2 ** 3 w Pythonie?" : [
("a. 6", -0.5),
("b. 8", 1),
("c. 9", -0.5)
],
"Jak usunąć ostatni element z listy w Pythonie?" : [
("a. list.remove()", -0.5),
("b. list.pop()", 1),
("c. del list", -0.5)
],
"Jak sprawdzić, czy liczba jest parzysta?" : [
("a. if x % 2 == 0:", 1),
("b. if even(x):", -0.5),
("c. if x // 2:", -0.5)
],
"Jak połączyć dwa słowniki w Pythonie 3.9+?" : [
("a. dict1 + dict2", -0.5),
("b. dict1 | dict2", 1),
("c. merge(dict1, dict2)", -0.5)
],
"Jakiego typu jest wynik: type(5j)?" : [
("a. complex", 1),
("b. float", -0.5),
("c. imaginary", -0.5)
],
"Jak w Pythonie otworzyć plik do odczytu?" : [
("a. open('plik.txt', 'r')", 1),
("b. open('plik.txt', 'w')", -0.5),
("c. open('plik.txt', 'rw')", -0.5)
],
"Co oznacza 'PEP 8'?" : [
("a. Oficjalny styl kodowania w Pythonie", 1),
("b. Biblioteka do testów", -0.5),
("c. Narzędzie do debugowania", -0.5)
],
"Jak przerwać pętlę w Pythonie?" : [
("a. stop", -0.5),
("b. break", 1),
("c. exit", -0.5)
],
"Jak kontynuować kolejną iterację pętli pomijając bieżącą?" : [
("a. skip", -0.5),
("b. continue", 1),
("c. pass", -0.5)
],
"Jak w Pythonie zamienić string na małe litery?" : [
("a. string.lower()", 1),
("b. string.toLowerCase()", -0.5),
("c. lower(string)", -0.5)
],
"Jak zamienić listę na krotkę?" : [
("a. tuple(lista)", 1),
("b. list.tuple()", -0.5),
("c. lista.toTuple()", -0.5)
],
"Jak w Pythonie sprawdzić dokumentację funkcji w konsoli?" : [
("a. help(funkcja)", 1),
("b. doc(funkcja)", -0.5),
("c. info(funkcja)", -0.5)
],
"Jak w Pythonie utworzyć listę liczb od 1 do 10?" : [
("a. list(range(1, 11))", 1),
("b. range(1, 10)", -0.5),
("c. [1:10]", -0.5)
],
"Jak zapisać dane do pliku w Pythonie?" : [
("a. with open('plik.txt', 'w') as f: f.write('tekst')", 1),
("b. write('plik.txt', 'tekst')", -0.5),
("c. save('plik.txt', 'tekst')", -0.5)
],
"Co zwróci 'Ala'.replace('A', 'O')?" : [
("a. Ola", 1),
("b. Ala", -0.5),
("c. Oa", -0.5)
],
"Jak w Pythonie posortować listę rosnąco?" : [
("a. lista.sort()", 1),
("b. sort(lista)", -0.5),
("c. lista.sorted()", -0.5)
],
"Co zwróci list(range(0, 10, 2))?" : [
("a. [0, 2, 4, 6, 8]", 1),
("b. [0, 1, 2, 3, 4]", -0.5),
("c. [2, 4, 6, 8, 10]", -0.5)
],
"Jak w Pythonie utworzyć pustą listę?" : [
("a. []", 1),
("b. list[]", -0.5),
("c. empty[]", -0.5)
],
"Jak sprawdzić, czy zmienna jest instancją klasy?" : [
("a. isinstance(x, Klasa)", 1),
("b. type(x) == Klasa", -0.5),
("c. istype(x, Klasa)", -0.5)
],
"Jak w Pythonie sprawdzić ilość kluczy w słowniku?" : [
("a. len(dict)", 1),
("b. count(dict)", -0.5),
("c. dict.length()", -0.5)
],
"Co oznacza zapis f\"Hello {name}\" w Pythonie?" : [
("a. F-string", 1),
("b. Lambda", -0.5),
("c. Format string z %", -0.5)
],
"Jak w Pythonie stworzyć funkcję anonimową?" : [
("a. lambda x: x * 2", 1),
("b. defanon x: x * 2", -0.5),
("c. func x: x * 2", -0.5)
],
"Co robi metoda strip() dla stringa?" : [
("a. Usuwa białe znaki z początku i końca", 1),
("b. Usuwa wszystkie spacje w środku", -0.5),
("c. Usuwa tylko ostatni znak", -0.5)
],
"Jak w Pythonie wywołać funkcję z listy funkcji?" : [
("a. funkcje[i]()", 1),
("b. call(funkcje[i])", -0.5),
("c. exec(funkcje[i])", -0.5)
],
"Jak sprawdzić, ile elementów w liście spełnia warunek?" : [
("a. sum(1 for x in lista if warunek)", 1),
("b. count(x for x in lista if warunek)", -0.5),
("c. lista.count(warunek)", -0.5)
]
}

sciezka_folderu = "data"
os.makedirs(sciezka_folderu, exist_ok=True)
pliki_w_folderze = os.listdir(sciezka_folderu)
print(pliki_w_folderze)
for i, plik in enumerate(pliki_w_folderze, start=1):
    print(f"{i}. {plik}")
    
sciezka_pliku = os.path.join(sciezka_folderu, "kwestionariusz.json")

def zapisz_plik():
    with open(sciezka_pliku, "w", encoding="utf-8") as plik_json:
        json.dump(
            kwestionariusz,
            plik_json,
            indent=4,
            ensure_ascii=False
        )
        
if os.path.exists(sciezka_pliku):
    with open(sciezka_pliku, "r", encoding="utf-8") as plik_json:
        kwestionariusz = json.load(plik_json)
else:
    zapisz_plik()

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")

lista_do_wymieszania = list(kwestionariusz.items())
random.shuffle(lista_do_wymieszania)
for pytanie, warianty in lista_do_wymieszania:
    print(pytanie)
    random.shuffle(warianty)

    for index, wariant in enumerate(warianty, start=1):
        tekst_odp, punkty_odp = wariant  # rozpakowanie krotki
        tekst_bez_literki = tekst_odp[3:]
        print(index, ".", tekst_bez_literki)

    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)