Sprawdzanie testu (zip, enumerate)
Treść zadania
Uczeń rozwiązał test wyboru. Wczytaj klucz poprawnych odpowiedzi oraz odpowiedzi ucznia — oba jako napisy, w których znak na pozycji i to odpowiedź na pytanie i + 1 (np. ABCDA oznacza: pytanie 1 — A, pytanie 2 — B itd.).
Dla każdego pytania wypisz, czy uczeń odpowiedział poprawnie, a na końcu podsumuj wynik.
Dane wejściowe
- 1. linia: klucz odpowiedzi — napis z wielkich liter
A–E, bez spacji - 2. linia: odpowiedzi ucznia — napis tej samej długości co klucz, z wielkich liter
A–E
Dane wyjściowe
- Dla każdego pytania (numerowanych od 1) jedna linia:
nr: OK— gdy odpowiedź jest poprawna,nr: źle (poprawna: X)— gdy jest błędna, gdzieXto poprawna odpowiedź z klucza.
- Ostatnia linia:
Wynik: p/n (q%), gdziepto liczba poprawnych odpowiedzi,n— liczba pytań, aq— procent poprawnych odpowiedzi z jedną cyfrą po przecinku (np.80.0,66.7).
Uwagi
zip(a, b)łączy dwa ciągi w pary kolejnych elementów:zip("AB", "AC")daje pary("A", "A")i("B", "C").enumerate(ciag, start=1)dodaje do każdego elementu jego numer, licząc od 1:enumerate("XY", start=1)daje pary(1, "X")i(2, "Y").- Razem:
```python
for nr, (poprawna, udzielona) in enumerate(zip(klucz, odpowiedzi), start=1):
...` - Procent sformatujesz tak:
f"{procent:.1f}".
Przykład
ABCDA ACCDA
1: OK 2: źle (poprawna: B) 3: OK 4: OK 5: OK Wynik: 4/5 (80.0%)
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 10
Zadania w tym rozdziale ćwiczą jednoczesną pracę na dwóch listach (lub dwóch napisach traktowanych jak ciągi znaków): łączenie, porównywanie, przechodzenie po indeksach i scalanie list posortowanych. Pod koniec rozdziału poznasz zbiory (set) — kolekcje bez powtórzeń, które pozwalają jednym działaniem wyznaczyć część wspólną, sumę czy różnicę dwóch list — oraz funkcje zip i enumerate, ułatwiające przechodzenie po dwóch ciągach naraz.
Konwencje wspólne:
- Każde zadanie jest osobnym programem: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
- Program nie wypisuje komunikatów typu „Podaj listę:”.
- Każda lista zajmuje na wejściu jedną linię, a jej elementy są oddzielone pojedynczymi spacjami, np.
5 3 7 2. Najpierw podana jest lista 1, w następnej linii lista 2. Każda lista ma co najmniej jeden element. - Listę liczb całkowitych wczytasz tak:
lista = [int(x) for x in input().split()](dla liczb zmiennoprzecinkowych użyjfloatzamiastint). - Gdy wynikiem jest lista, wypisz ją tak, jak robi to
print(lista)w Pythonie: w nawiasach kwadratowych, elementy oddzielone przecinkiem i spacją, np.[1, 2, 3]. Pusta lista to[]. - Gdy treść mówi o elementach „oddzielonych przecinkami bez spacji”, wypisz je w jednej linii, np.
5,1,3, bez przecinka na końcu — np.print(*lista, sep=",").
Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.
Przywrócono Twój zapisany kod.
Python uruchomi się w przeglądarce przy pierwszym teście.
Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.
Testy
Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.
Test 1
Nie uruchomionoA A
1: OK Wynik: 1/1 (100.0%)
Test 2
Nie uruchomionoA B
1: źle (poprawna: A) Wynik: 0/1 (0.0%)
Test 3
Nie uruchomionoABC CBA
1: źle (poprawna: A) 2: OK 3: źle (poprawna: C) Wynik: 1/3 (33.3%)
Test 4
Nie uruchomionoDDDD DDDD
1: OK 2: OK 3: OK 4: OK Wynik: 4/4 (100.0%)
Test 5
Nie uruchomionoABCDABCD ABCDDCBA
1: OK 2: OK 3: OK 4: OK 5: źle (poprawna: A) 6: źle (poprawna: B) 7: źle (poprawna: C) 8: źle (poprawna: D) Wynik: 4/8 (50.0%)
Test 6
Nie uruchomionoBCA BCB
1: OK 2: OK 3: źle (poprawna: A) Wynik: 2/3 (66.7%)