Ćwiczenie:
Do zbioru danych:
przedmioty = {’matematyka’, 'polski’}
dodaj przedmiot o nazwie 'angielski’
Oczekiwany wynik:
- {’angielski’, 'matematyka’, 'polski’}
Ćwiczenie:
Podany jest słownik:
project_ids = {’01’: 'open’, ’02’: 'new’, ’03’: 'in progress’, ’04’: 'completed’}
Wykorzystując instrukcję warunkową sprawdź, czy status projektu z id = ’02’ jest ustawiony na 'new’. Jeśli tak, zmień ten status na 'open’.
W odpowiedzi wydrukuj słownik project_ids do konsoli.
Oczekiwany wynik:
- {’01’: 'open’, ’02’: 'open’, ’03’: 'in progress’, ’04’: 'completed’}
Ćwiczenie:
Napisz program, który sprawdzi czy podany element:
- item = '001′
występuje w liście:
- items = [’001′, '000′, '003′, '005′, '006′]
Jeżeli tak, to usuń ten element z listy. W odpowiedzi wydrukuj otrzymaną listę do konsoli.
Oczekiwany wynik:
- [’000′, '003′, '005′, '006′]
Ćwiczenie :
Pobierz od użytkownika tekst i przypisz go do zmiennej. Następnie:
- Zamień wszystkie litery na małe.
- Usuń spacje i kropkę jeżeli istnieją.
- Utwórz zbiór składający się z wszystkich liter w tak przetworzonym tekście.
- Odpowiednią metodą dla zbiorów usuń z tego zbioru wszystkie samogłoski {’a’, 'e’, 'i’, 'o’, 'u’}. Użyj metody difference()
- Wydrukuj długość zbioru przed i po przeprowadzonych operacjach.
Ćwiczenie :
Różnica symetryczna dwóch zbiorów to zbiór składający się z wszystkich elementów tych zbiorów oprócz elementów wspólnych. Dla dwóch zbiorów: A = {2, 4, 6, 8} oraz B = {4, 10} wyznacz różnicę symetryczną za pomocą metody symmetric_difference(). Wynik wydrukuj do konsoli.
Ćwiczenie :
Obsługujesz skrypt wysyłający reklamy do klientów. Twoje zadanie polega na wysłaniu reklam do klientów, którzy skorzystali tylko z jednej kampanii reklamowej. Masz dwa zbiory danych, id klientów, którzy skorzystali z kampanii reklamowej pierwszej i drugiej:
ad1 = {’001′, '002′, '003′}
ad2 = {’002′, '003′, '007′}
Wybierz id klientów, do których można wysłać kolejną reklamę (id, które nie pojawiły się dwa razy). Z pomocą przyjdzie ci metoda symmetric_difference()
Ćwiczenie :
Masz dwa zbiory z informacjami o klientach:
open = {1, 3, 5, 6, 8}
access = {2, 5, 8}
Wyświetl id klienta, który otworzył reklamę i zapisał się na kurs. (id pojawia się w obu zbiorach – intersection())
Ćwiczenie :
W zbiorze [’1001′, '1005′, '1007′, '1003′, '1009′, '1005′, '1001′, '1008′, '1001′, '1004′] zlicz wystąpienia elementu '1001′
Ćwiczenie :
Stwórz słownik, który przechowuje w indeksach numerycznych liczby od 1 do 10, a ich wartości są kwadratami indeksów. (np. {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49})
Ćwiczenie :
W podanym słowniku: {’Boombit’: '001′, 'CD Projekt’: '002′, 'Playway’: '003′} zamień miejscami indeksy z wartościami i wydrukuj wynik.
Ćwiczenie :
Z podanego zbioru danych: {’Boombit’: 22, 'CD Projekt’: 295, 'Playway’: 350} wyciągnij pary klucz:wartość dla wartości powyżej 100
Ćwiczenie z rozwiązaniem:
Zbuduj listę składającą się ze słowników mapujących kolejne cyfry od 1 do 9 włącznie na ich odpowiednie n-te potęgi, dla n = 1…5. Wynik wydrukuj do konsoli.
Pomocniczy wynik:
[
{1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9},
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81},
{1: 1, 2: 8, 3: 27, 4: 64, 5: 125, 6: 216, 7: 343, 8: 512, 9: 729},
…
]
Rozwiązanie
data = [{i: i**j for i in range(1, 10)} for j in range(1, 6)]
print(data)
Ćwiczenie z rozwiązaniem:
Dane są dwie listy:
przedmiot = [’PAM’, 'PPAI’, 'PPAD’]
oceny = [’pl’, 'spr’, 'projekt’]
Wykorzystując dict comprehension zbuduj poniższy słownik ustawiając wartości ocen na None:
{
’PAM’: {’pl’: None, 'spr’: None, 'projekt’: None},
’PPAI’: {’pl’: None, 'spr’: None, 'projekt’: None},
’PPAD’: {’pl’: None, 'spr’: None, 'projekt’: None}
}
Rozwiązanie:
data = {idx: {i: None for i in oceny} for idx in przedmiot}
print(data)
Ćwiczenie z rozwiązaniem:
Przekształć listę
przedmiot = [’PAM’, 'PPAI’, 'PPAD’]
w słownik z indeksami numerycznymi.
Rozwiązanie:
data = {key: val for key, val in enumerate(przedmiot)}
print(data)
Ćwiczenie :
Podana jest lista cen produktów netto:
netto = [5.5, 4.0, 9.0, 10.0]
Podatek VAT na te produkty wynosi 23%.
Policz cenę brutto dla każdego produktu. Cenę zaokrąglij do drugiego miejsca po przecinku. Otrzymaną listę wydrukuj do konsoli.
Ćwiczenie :
Podany jest poniższy słownik:
data = dict(zip((’a’, 'b’, 'c’, 'd’, 'e’, 'f’),(1, 2, 3, 4, 5, 6)))
Przekształć podany słownik w listę:
[[’a’, 1], [’b’, 2], [’c’, 3], [’d’, 4], [’e’, 5], [’f’, 6]]
i przypisz do zmiennej result. Wydrukuj zawartość zmiennej result do konsoli.
Projekt – SPRAWDZANIE POPRAWNOŚCI NAWIASÓW
Opis zadania
Twoim zadaniem jest napisanie programu, który sprawdza czy nawiasy w tekście są poprawnie domknięte.
Program musi obsługiwać trzy typy nawiasów:
- Okrągłe:
( ) - Kwadratowe:
[ ] - Klamrowe:
{ }
Zasady poprawności
Nawiasy są poprawne gdy:
- Każdy nawias otwierający ma swój zamykający
- Nawiasy zamykają się w odpowiedniej kolejności
- Każdy nawias zamykający pasuje do ostatnio otwartego
Przykłady
POPRAWNE:
(a + b)[1, 2, 3]{x: 10}(a + [b * c]){(a + b) * [c - d]}- Pusty tekst (brak nawiasów)
NIEPOPRAWNE:
(a + b]– niewłaściwy typ zamykającego((a + b)– brak zamknięcia(a + b))– za dużo zamykających]a + b[– zamykający przed otwierającym{[}]– niewłaściwa kolejność
Przypomnienie: Jak działa STOS?
Przykład: sprawdzamy "{[()]}"
Krok po kroku:
1. Napotkano '{' → stos: ['{']
2. Napotkano '[' → stos: ['{', '[']
3. Napotkano '(' → stos: ['{', '[', '(']
4. Napotkano ')' → pasuje do '(' → zdejmij ze stosu → stos: ['{', '[']
5. Napotkano ']' → pasuje do '[' → zdejmij ze stosu → stos: ['{']
6. Napotkano '}' → pasuje do '{' → zdejmij ze stosu → stos: []
7. Stos pusty → POPRAWNE
Pamiętaj: Zawsze zdejmujemy i sprawdzamy OSTATNI element ze stosu!
Część 1: Podstawowa wersja (5 punktów)
Napisz funkcję sprawdz_nawiasy(tekst) która:
- Przyjmuje tekst jako parametr
- Zwraca
Truejeśli nawiasy są poprawne - Zwraca
Falsejeśli nawiasy są niepoprawne
def sprawdz_nawiasy(tekst):
# Twój kod tutaj
pass
# Testy
print(sprawdz_nawiasy("(a + b)")) # True
print(sprawdz_nawiasy("(a + b]")) # False
print(sprawdz_nawiasy("((a + b)")) # False
print(sprawdz_nawiasy("{[()]}")) # True
Wskazówki:
- Użyj STOSU (listy)
stos = [] - Algorytm:
- Przejdź przez każdy znak w tekście
- Jeśli to nawias otwierający
(,[,{→ dodaj na stos - Jeśli to nawias zamykający
),],}→ sprawdź czy pasuje do ostatniego ze stosu - Na końcu stos musi być pusty
- Przydatne operacje:
stos.append(znak) # Dodaj na stos stos.pop() # Zdejmij ze stosu len(stos) == 0 # Czy stos pusty? - Jak sprawdzić czy pasują?
pary = {'(': ')', '[': ']', '{': '}'}
Część 2: Rozszerzona wersja (5 punktów)
Ulepsz swoją funkcję aby:
- Wypisywała dokładną pozycję błędu w tekście
- Wypisywała typ błędu (np. „brak zamknięcia”, „zły typ”)
- Ignorowała znaki niebędące nawiasami
def sprawdz_nawiasy_szczegolowo(tekst):
# Zwróć krotkę: (czy_poprawne, komunikat)
pass
# Przykład użycia:
wynik, komunikat = sprawdz_nawiasy_szczegolowo("(a + b]")
print(f"Poprawne: {wynik}")
print(f"Komunikat: {komunikat}")
# Wyjście:
# Poprawne: False
# Komunikat: Błąd na pozycji 6: oczekiwano ')', znaleziono ']'
Część 3: Dla ambitnych (bonus 3 punkty)
Dodaj funkcję napraw_nawiasy(tekst) która:
- Próbuje naprawić tekst dodając brakujące nawiasy
- Zwraca poprawiony tekst
def napraw_nawiasy(tekst):
# Twój kod tutaj
pass
# Przykład:
print(napraw_nawiasy("((a + b)")) # "((a + b))"
print(napraw_nawiasy("(a + b")) # "(a + b)"
Kryteria oceny
| Kryterium | Punkty |
|---|---|
| Podstawowa funkcja działa poprawnie | 3 pkt |
| Obsługa wszystkich typów nawiasów | 1 pkt |
| Ignorowanie innych znaków | 1 pkt |
| Szczegółowe komunikaty o błędach | 3 pkt |
| Wskazanie pozycji błędu | 2 pkt |
| Funkcja naprawiająca (bonus) | 3 pkt |
| RAZEM | 10 pkt (+3 bonus) |
Przypadki testowe do sprawdzenia
Twój program powinien przejść te testy:
# Test 1: Proste przypadki
assert sprawdz_nawiasy("()") == True
assert sprawdz_nawiasy("[]") == True
assert sprawdz_nawiasy("{}") == True
# Test 2: Zagnieżdżone
assert sprawdz_nawiasy("([{}])") == True
assert sprawdz_nawiasy("{[()]}") == True
# Test 3: Z tekstem
assert sprawdz_nawiasy("(a + b) * [c - d]") == True
assert sprawdz_nawiasy("lista[0]") == True
# Test 4: Błędne
assert sprawdz_nawiasy("(]") == False
assert sprawdz_nawiasy("((()") == False
assert sprawdz_nawiasy("())") == False
assert sprawdz_nawiasy("{[(])}") == False
# Test 5: Pusty tekst
assert sprawdz_nawiasy("") == True
assert sprawdz_nawiasy("abc def") == True
print("Wszystkie testy zaliczone!")
Czas na wykonanie
- Część 1: 15-20 minut
- Część 2: 15-20 minut
- Część 3: 20-30 minut (opcjonalnie)
Powodzenia!
Pamiętaj:
- Używaj stosu (listy)
- append() dodaje na stos
- pop() (bez argumentu!) zdejmuje ze stosu
- Sprawdzaj czy stos nie jest pusty przed pop()