Ten dodatek zawiera zbiór zadań, które pomogą Ci utrwalić wiedzę zdobytą podczas kursu. Nauczą Cię też dobierać odpowiednie typy danych i operacje w zależności od problemu przed jakim stajesz.
Rozwiązując zadania skup się przede wszystkim na napisaniu działającego programu. Nie myśl o jego "jakości": tym jak szybko działa, albo jak ładnie wygląda kod. Zacznij od rozwiązania problemu, a dopiero potem oceń czy trzeba cokolwiek poprawić.
Napisz funkcję o nazwie title
, która będzie działała tak jak metoda
title
na stringu, ale nie używaj tej metody.
Przykład:
>>> title('ala MA kOTA')
'Ala Ma Kota'
Napisz funkcję grupuj
, która będzie grupowała słowniki według wartości
dla wybranego klucza.
Przykład:
>>> owoce = [
... {'nazwa': 'jabłko', 'kolor': 'czerwony'},
... {'nazwa': 'banan', 'kolor': 'żółty'},
... {'nazwa': 'cytryna', 'kolor': 'żółty'},
... {'nazwa': 'gruszka', 'kolor': 'zielony'},
... {'nazwa': 'truskawka', 'kolor': 'czerwony'}
... ]
>>> grupy = grupuj(owoce, 'kolor')
>>> for kolor, lista_owocow in grupy.items():
... print(kolor, lista_owocow)
...
czerwony [{'nazwa': 'jabłko', 'kolor': 'czerwony'}, {'nazwa': 'truskawka', 'kolor': 'czerwony'}]
żółty [{'nazwa': 'banan', 'kolor': 'żółty'}, {'nazwa': 'cytryna', 'kolor': 'żółty'}]
zielony [{'nazwa': 'gruszka', 'kolor': 'zielony'}]
Funkcja powinna przyjmować dwa argumenty: listę słowników oraz nazwę klucza. Wynikiem funkcji powinien być słownik, gdzie kluczami będą nazwy grup, a wartościami listy słowników znajdujących się w tych grupach.
Napisz funkcję delta_compression
, która jako argument przyjmuje
posortowaną listę liczb całkowitych i zwróci tę samą listę
skompresowaną następującym algorytmem:
- Pierwszy element listy wyjściowej jest taki sam jak pierwszy element listy wejściowej.
- Każdy następny element listy wyjściowej jest równy różnicy między
odpowiadającym mu elementem listy wejściowej a elementem
poprzedzającym go, czyli
WY[i] = WE[i] - WE[i-1]
.
Przykład:
>>> we = [5, 7, 11, 21, 28, 39]
>>> delta_compression(we)
[5, 2, 4, 10, 7, 11]
Napisz funkcję grupuj_i_licz
, która jako argument przyjmie listę
dwuelementowych krotek, gdzie pierwszy element to data (instancja
datetime.date
), a drugi to liczba całkowita, i obliczy sumy tych liczb
dla każdego miesiąca jaki występuje wśród tych dat. Funkcja powinna zwrócić
słownik, gdzie kluczami będą krotki (rok, miesiąc)
, a wartościami sumy
liczb.
Przykład:
>>> x = grupuj_i_licz([
... (datetime.date(2015, 1, 29), 10),
... (datetime.date(2015, 1, 30), 12),
... (datetime.date(2015, 1, 31), 10),
... (datetime.date(2015, 2, 1), 9),
... (datetime.date(2015, 2, 2), 9)
... ])
>>> print(x)
{(2015, 1): 32, (2015, 2): 18}
Napisz funkcję tnij
, która przyjmie dwa argumenty: tekst oraz liczbę.
Funkcja powinna zwrócić tekst pocięty na fragmenty (listę), każdy
o długości takiej jak liczba podana w argumencie. Ostatni fragment może
być krótszy niż wymagana długość.
Przykład:
>>> tnij('12345678', 3)
['123', '456', '78']
>>> tnij('12345678', 5)
['12345', '678']
>>> tnij('123', 4)
['123']
Napisz funkcję, która jako argument przyjmie dowolny tekst i zwróci słownik, którego kluczami będą wszystkie słowa z tego tekstu, a wartościami będą liczby wystąpień tych słów w tekście. Funkcja powinna być obojętna na wielkość liter (czyli 'Kot' i 'kot' mają być traktowane jako jedno słowo) i powinna ignorować znaki interpunkcyjne.
Przykład:
>>> tekst = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer sollicitudin ultricies eros, vitae eleifend ipsum sodales ut. Pellentesque libero ipsum, euismod eget volutpat nec, hendrerit vel turpis."
>>> licz_slowa(tekst)
{'sollicitudin': 1, 'elit': 1, 'vel': 1, 'eleifend': 1, 'sodales': 1, 'eros': 1, 'sit': 1, 'nec': 1, 'consectetur': 1, 'pellentesque': 1, 'vitae': 1, 'eget': 1, 'hendrerit': 1, 'dolor': 1, 'turpis': 1, 'euismod': 1, 'integer': 1, 'lorem': 1, 'amet': 1, 'ipsum': 3, 'ut': 1, 'ultricies': 1, 'libero': 1, 'adipiscing': 1, 'volutpat': 1}