_ _ _ _ | |_ ___ _ __ _ __ ___ (_)_ __ __ _| | | ___ __ _ | __/ _ \ '__| '_ ` _ \| | '_ \ / _` | | |/ _ \ / _` | | || __/ | | | | | | | | | | | (_| | | | (_) | (_| | \__\___|_| |_| |_| |_|_|_| |_|\__,_|_|_|\___/ \__, | |___/
☠ morketsmerke ☠
Część I - Python.
Uwaga! Poniższy zbiór cwiczeń został skopiowany bezpośrednio z ksiązki (poz. 1 w źródłach) z sekcji ZRÓB TO SAM.
Rozdział 1:
1.1. Witryna python.org
Zapoznaj się ze stroną domową Pythona (http://python.org/) i spróbuj wyszukać interesujące Cię tematy. Gdy zdobędziesz nieco więcej doświadczenia w programowaniu w Pythonie, poszczególne części tej witryny staną się dla Ciebie znacznie użyteczniejsze.
1.2. Błędy w programie typu „Witaj, świecie!”
Otwórz utworzony w tym rozdziale plik hello_world.py. Wprowadź dowolny błąd w wierszu kodu, a następnie uruchom program. Czy potrafisz wprowadzić zmianę powodującą wygenerowanie komunikatu błędu? Czy ten komunikat błędu ma dla Ciebie sens? Czy potrafisz wprowadzić zmianę niepowodującą wygenerowania błędu? Na jakiej podstawie uważasz, że ta zmiana nie jest błędem?
1.3. Niczym nieograniczone umiejętności
Gdybyś posiadał nieograniczone umiejętności w zakresie programowania, jaki program byś stworzył? Dzięki tej książce masz nauczyć się programować. Jeżeli będziesz miał na uwadze pewien cel, który sam sobie wyznaczysz, zyskasz możliwość częściowego wykorzystania nowo nabytych umiejętności. Teraz jest więc doskonały moment na określenie tego, co chciałbyś stworzyć. Dobrym rozwiązaniem jest prowadzenie dziennika „idei”, do którego będziesz mógł się odwoływać, rozpoczynając pracę nad nowym projektem. Poświęć kilka minut na opisanie trzech programów, które chciałbyś stworzyć.
Rozdział 2:
Utwórz oddzielne programy dla każdego z poniższych ćwiczeń. Poszczególne programy umieszczaj w plikach o nazwach zgodnych ze standardowymi konwencjami Pythona, czyli zawierających jedynie małe litery i znaki podkreślenia, na przykład prosty_komunikat.py i proste_komunikaty.py.
2.1. Prosty komunikat
Umieść komunikat w zmiennej, a następnie wyświetl go.
2.2. Proste komunikaty
Umieść komunikat w zmiennej, a następnie go wyświetl. Później zmień wartość zmiennej tak, aby zawierała inny komunikat, i ten nowy komunikat również wyświetl.
2.3. Osobiste powitanie
Zapisz w zmiennej imię osoby, a następnie wyświetl
dla niej komunikat powitania. Komunikat powinien być prosty, na przykład
„Witaj, Eryk! Czy chcesz dzisiaj poznawać Pythona?”
.
2.4. Wielkość liter w imionach
Zapisz w zmiennej imię osoby, a następnie wyświetl je za pomocą małych liter, wielkich liter oraz z użyciem wielkiej litery jako pierwszej litery imienia.
2.5. Sławny cytat
Odszukaj cytat sławnej osoby, którą cenisz. Wyświetl ten
cytat wraz z imieniem i nazwiskiem jego autora. Wygenerowane dane wyjściowe
powinny wyglądać tak, jak pokazałem poniżej, łącznie ze znakami cytowania:
Albert Einstein powiedział kiedyś:
"Osoba, która nigdy nie popełniła błędu,
jest kimś, kto nigdy nie próbował niczego nowego"
.
2.6. Sławny cytat 2
Powtórz ćwiczenie 2.5, ale tym razem imię i nazwisko autora cytatu umieść w zmiennej o nazwie famous_person. Następnie przygotuj komunikat i umieść go w nowej zmiennej o nazwie message. Na koniec wyświetl komunikat.
2.7. Usunięcie białych znaków z imienia
Zapisz w zmiennej imię osoby wraz z pewnymi białymi znakami na początku i końcu imienia. Upewnij się, że co najmniej raz użyłeś sekwencji \t i \n.
Wyświetl to imię wraz ze znakami odstępu. Następnie wyświetl je jeszcze trzy razy, ale za każdym razem wykorzystaj jedną z metod przeznaczonych do usuwania białych znaków: lstrip(), rstrip() i strip().
2.8. Liczba osiem
Zapisz operacje dodawania, odejmowania, mnożenia i dzielenia, których wynikiem będzie liczba 8. Upewnij się, że użyłeś funkcji print(), aby wyświetlić wyniki. Powinieneś utworzyć cztery wiersze, które będą wyglądały tak jak ten poniżej:
print(5 + 3)
Wygenerowane dane wyjściowe powinny składać się po prostu z czterech wierszy wraz z liczbą 8 pojawiającą się jednokrotnie w każdym z nich.
2.9. Ulubiona liczba
Umieść w zmiennej ulubioną liczbę. Następnie używając tej zmiennej, utwórz komunikat ujawniający tę ulubioną liczbę. Wyświetl ten komunikat.
2.10. Dodawanie komentarzy
Wybierz dwa utworzone dotąd programy i umieść w nich przynajmniej po jednym komentarzu. Jeżeli nie masz nic ciekawego do napisania z powodu prostoty dotychczasowych programów, wpisz na początku pliku po prostu imię i datę. Następnie dodaj jedno zdanie opisujące przeznaczenie danego programu.
2.11. Zen Pythona
Wydaj polecenie import this
w powłoce
Pythona i przejrzyj
reguły, które nie zostały przedstawione w tym rozdziale.
Rozdział 3:
Wypróbuj poniższe krótkie programy, aby zdobyć nieco doświadczenia w pracy z listami Pythona. Możesz utworzyć nowy katalog dla ćwiczeń w poszczególnych rozdziałach, aby tym samym trochę je uporządkować.
3.1. Imiona
Utwórz listę o nazwie names i umieść na niej imiona kilku przyjaciół. Wyświetl wszystkie imiona przez uzyskanie dostępu do poszczególnych elementów listy (za każdym razem do jednego).
3.2. Powitania
Rozpocznij od listy utworzonej w ćwiczeniu 3.1, ale zamiast samego imiona osoby wyświetl komunikat, który będzie jej dotyczył. Tekst wszystkich komunikatów powinien pozostać taki sam, ale mają być one spersonalizowane dzięki wykorzystaniu imienia konkretnej osoby.
3.3. Twoja własna lista
Zastanów się nad ulubionymi środkami transportu, na przykład motocykl lub samochód, a następnie utwórz listę przechowującą wiele przykładów. Wykorzystaj tę listę do wyświetlenia kilku zdań o jej elementach, na przykład „Chciałbym mieć motocykl Honda”.
3.4. Lista gości
Jeżeli mógłbyś zaprosić kogokolwiek na obiad, żyjącego lub nieżyjącego, to kogo byś zaprosił? Utwórz listę zawierającą przynajmniej trzy osoby, które chciałbyś zaprosić na obiad. Następnie wykorzystaj tę listę do wyświetlenia dla każdej z tych osób komunikatu zapraszającego ją na obiad.
3.5. Zmiana listy gości
Dowiedziałeś się, że jedna z zaproszonych osób nie może przyjść na obiad. Konieczne jest więc wysłanie następnych zaproszeń. Zastanów się, kogo w takim razie jeszcze zaprosisz.
- Pracę rozpocznij od programu utworzonego w ćwiczeniu 3.4. Na jego końcu umieść polecenie print() wyświetlające komunikat z informacją, który z zaproszonych gości nie może przyjść.
- Zmodyfikuj listę i dane gościa, który nie będzie mógł przybyć na obiad, zastąp danymi nowej zaproszonej osoby.
- Wyświetl drugi zestaw komunikatów z zaproszeniem, po jednym komunikacie dla każdej osoby znajdującej się na liście.
3.6. Więcej gości
Znalazłeś większy stół, co oznacza więcej miejsca dla gości. Zastanów się więc nad jeszcze trzema osobami, które mógłbyś zaprosić na obiad.
- Pracę rozpocznij od programu utworzonego w ćwiczeniach 3.4 i 3.5. Na jego końcu umieść polecenie print() wyświetlające komunikat o znalezieniu większego stołu.
- Za pomocą metody insert() dodaj nowego gościa na początku listy.
- Za pomocą metody insert() dodaj nowego gościa w środku listy.
- Za pomocą metody append() dodaj nowego gościa na końcu listy.
- Wyświetl nowy zestaw komunikatów z zaproszeniem, po jednym komunikacie dla każdej osoby znajdującej się na liście.
3.7. Kurcząca się lista gości
Okazało się, że większy stół nie zostanie dostarczony na czas i dlatego masz miejsce dla jedynie dwóch gości.
- Pracę rozpocznij od programu utworzonego w ćwiczeniu 3.6. Dodaj nowy wiersz wyświetlający komunikat, że na obiad możesz zaprosić tylko dwie osoby.
- Za pomocą metody pop() usuwaj po jednym gościu z listy, aż zostaną na niej tylko dwie osoby. Po usunięciu każdej osoby wyświetlaj przeznaczony dla niej komunikat z przeprosinami za brak możliwości zaproszenia jej na obiad
- Obu osobom pozostałym na liście wyświetl spersonalizowany komunikat z zaproszeniem na obiad.
- Użyj polecenia del do usunięcia dwóch ostatnich osób z listy, która w ten sposób powinna stać się pusta. Na koniec wyświetl listę, aby upewnić się, że faktycznie jest pusta.
3.8. Zwiedzaj świat
Pomyśl o pięciu miejscach na świecie, które chciałbyś odwiedzić.
- Wszystkie miejsca umieść na liście i upewnij się, że nie jest ona ułożona alfabetycznie.
- Wyświetl listę w jej pierwotnej kolejności. Nie przejmuj się eleganckim wyświetleniem listy, a po prostu wyświetl ją jako zwykłą listę Pythona.
- Za pomocą funkcji sorted() wyświetl listę w kolejności alfabetycznej bez modyfikacji rzeczywistej listy.
- Ponownie wyświetl listę początkową, aby pokazać, że nie została zmodyfikowana.
- Za pomocą funkcji sorted() wyświetl listę w odwrotnej kolejności alfabetycznej bez modyfikacji rzeczywistej listy.
- Ponownie wyświetl listę początkową, aby pokazać, że nie została zmodyfikowana.
- Za pomocą metody reverse() zmień kolejność listy, a następnie wyświetl ją, aby potwierdzić zmianę kolejności.
- Ponownie wykorzystaj metodę reverse() do zmiany kolejności listy. Wyświetl ją, aby pokazać, że powróciła do pierwotnej kolejności.
- Za pomocą metody sort() zmień kolejność listy na alfabetyczną, a następnie wyświetl ją, aby potwierdzić zmianę kolejności.
- Za pomocą metody sort() zmień kolejność listy na odwrotnie alfabetyczną, a następnie wyświetl ją, aby potwierdzić zmianę kolejności.
3.9. Goście na obiad
Pracę rozpocznij od jednego z programów utworzonych w ćwiczeniach od 3.4 do 3.7. Za pomocą funkcji len() wyświetl komunikat wskazujący liczbę osób, które zostały zaproszone na obiad.
3.10. Każda funkcja.
Zastanów się, jakie informacje mógłbyś umieścić na liście. Na przykład utwórz listę gór, rzek, państw, miast, języków lub czegokolwiek innego. Przygotuj program, który będzie tworzył listę przechowującą te informacje i używał co najmniej jeden raz każdej funkcji wprowadzonej w tym rozdziale.
3.11. Celowy błąd
Jeżeli jeszcze w żadnym z tworzonych programów nie spotkałeś się z błędem indeksu, spróbuj go teraz wywołać. W dowolnym programie tak zmień wartość indeksu, aby nastąpiło zgłoszenie błędu indeksu. Zanim zamkniesz plik programu, upewnij się, że usunąłeś błąd.
Rozdział 4:
4.1. Pizza
Pomyśl o przynajmniej trzech rodzajach pizzy. Umieść te nazwy na liście, a następnie wyświetl je za pomocą pętli for.
- Zmodyfikuj pętlę for w taki sposób, aby zamiast samej nazwy pizzy wyświetlała zdanie wykorzystujące tę nazwę. Dla każdego rodzaju pizzy powinieneś mieć jeden wiersz danych wyjściowych zawierający proste zdanie w stylu: „Lubię pizzę pepperoni”.
- Poza blokiem pętli, na końcu programu dodaj zdanie informujące o tym, jak bardzo lubisz pizzę. Wygenerowane dane wyjściowe powinny więc składać się z co najmniej trzech zdań o Twoich ulubionych rodzajach pizzy oraz jednego zdania dodatkowego w stylu: „Naprawdę uwielbiam pizzę!”.
4.2. Zwierzęta
Spróbuj znaleźć trzy różne zwierzęta charakteryzujące się podobnymi cechami. Umieść ich nazwy na liście, a następnie wyświetl je za pomocą pętli for.
- Zmodyfikuj program w taki sposób, aby wyświetlał zdanie dotyczące danego zwierzęcia, na przykład „Pies jest prawdziwym przyjacielem człowieka.
- Na końcu programu umieść zdanie wskazujące na jakieś podobieństwo między wymienionymi wcześniej zwierzętami. To może być zdanie w stylu: „Wszystkie wymienione powyżej zwierzęta są wspaniałe!”.
4.3. Odliczanie do dwudziestu
Użyj pętli for do wyświetlenia liczb od 1 do 20 włącznie.
4.4. Milion
Utwórz listę liczb od jednego do miliona, a następnie wyświetl ją za pomocą pętli for. (Jeżeli proces wyświetlania danych wyjściowych trwa zbyt długo, zatrzymaj go przez naciśnięcie klawiszy Ctrl+C lub po prostu przez zamknięcie okna danych wyjściowych).
4.5. Sumowanie do miliona
Utwórz listę liczb od jednego do miliona, a następnie za pomocą funkcji min() i max() sprawdź, czy lista faktycznie zaczyna się od wartości jeden i kończy na milionie. Ponadto wykorzystaj funkcję sum(), aby zobaczyć, jak szybko Python może dodać milion liczb.
4.6. Listy nieparzyste
Za pomocą trzeciego argumentu funkcji range() utwórz listę liczb nieparzystych z zakresu od 1 do 20, a następnie wyświetl je za pomocą pętli for.
4.7. Trzy
Utwórz listę liczb od 3 do 30 podniesionych do trzeciej potęgi, a następnie wyświetl zawartość listy za pomocą pętli for.
4.8. Sześcian
Liczba podniesiona do trzeciej potęgi jest nazywana sześcianem. Na przykład sześcian liczby 2 jest zapisywany w Pythonie jako 2**3. Utwórz listę pierwszych dziesięciu sześcianów (to znaczy liczb od 1 do 10 podniesionych do trzeciej potęgi), a następnie wyświetl je za pomocą pętli for.
4.9. Sześcian za pomocą listy składanej
Wykorzystaj listę składaną do wygenerowania listy pierwszych dziesięciu sześcianów.
4.10. Wycinki
Pracę rozpocznij od jednego z programów utworzonych w tym rozdziale, a następnie na końcu dodaj kilka wierszy kodu wykonujących wymienione poniżej zadania:
- Wyświetlenie komunikatu „Pierwsze trzy elementy listy to:”. Następnie za pomocą wycinka wyświetl trzy pierwsze elementy listy.
- Wyświetlenie komunikatu „Trzy elementy w środku listy to:”. Następnie za pomocą wycinka wyświetl trzy elementy znajdujące się w środku listy.
- Wyświetlenie komunikatu „Ostatnie trzy elementy listy to:”. Następnie za pomocą wycinka wyświetl trzy ostatnie elementy listy.
4.11. Moja pizza, Twoja pizza
Pracę rozpocznij od programu utworzonego w ćwiczeniu 4.1 we wcześniejszej części rozdziału. Utwórz kopię listy z pizzami i nadaj jej nazwę friend_pizzas. Teraz wykonaj wymienione poniżej zadania:
- Dodaj nową pizzę do listy początkowej.
- Dodaj pizzę (inną niż w poprzednim punkcie) do listy friend_pizzas.
- Sprawdź, czy faktycznie masz dwie oddzielne listy. Wyświetl komunikat „Moje ulubione rodzaje pizzy to:”, a następnie użyj pętli for do wyświetlenia zawartości pierwszej listy. Teraz wyświetl komunikat „Ulubione rodzaje pizzy mojego przyjaciela to:” i za pomocą pętli for wyświetl zawartość drugiej listy. Upewnij się, że każda nowa pizza została umieszczona na odpowiedniej liście.
4.12. Więcej pętli
We wszystkich programach foods.py przedstawionych w tym rozdziale unikałem użycia pętli for, aby zaoszczędzić nieco miejsca. Wybierz dowolną wersję programu foods.py, a następnie utwórz dwie pętle for w celu wyświetlenie obu list potraw.
4.13. Bufet
Restauracja w stylu bufetu oferuje jedynie pięć prostych potraw. Wymień więc pięć prostych potraw i umieść je w krotce.
- Za pomocą pętli for wyświetl wszystkie potrawy oferowane przez restaurację.
- Spróbuj zmodyfikować jeden z elementów i upewnij się, że Python odrzucił tę zmianę.
- Restauracja zmienia menu i zastępuje dwie dotychczasowe potrawy nowymi. Dodaj blok kodu nadpisujący krotkę, a następnie wykorzystaj pętlę for do wyświetlenia wszystkich potraw ze zmodyfikowanego menu.
4.14. Specyfikacja PEP 8
Przejrzyj specyfikację PEP 8, którą znajdziesz na stronie https://www.python.org/dev/peps/pep-0008/. W tym momencie niewiele z niej skorzystasz, ale i tak warto ją przynajmniej przejrzeć.
4.15. Przegląd kodu
Wybierz trzy dowolne programy z tych, które przygoto- wałeś w tym rozdziale, a następnie zmodyfikuj je, aby stały się zgodne z PEP 8.
- Używaj czterech spacji dla każdego poziomu wcięć. Jeżeli jeszcze tego nie zrobiłeś, skonfiguruj edytor tekstu w taki sposób, aby wstawiał cztery spacje za każdym razem, gdy naciśniesz klawisz tabulacji (więcej informacji na ten temat znajdziesz w dodatku B).
- Używaj mniej niż 80 znaków w każdym wierszu. W edytorze tekstu włącz wyświetlanie pionowej linii wskazującej położenie 80. znaku.
- W programie oszczędnie używaj pustych wierszy.
Rozdział 5:
5.1. Testy warunkowe
Utwórz serię testów warunkowych. Wyświetl polecenia opisujące poszczególne testy oraz przewidywany wynik. Przygotowany przez Ciebie kod powinien być podobny do poniższego:
car = 'subaru' print("Czy car == 'subaru'? Przewiduję wartość True.") print(car == 'subaru') print("\nCzy car == 'audi'? Przewiduję wartość False.") print(car == 'audi')
- Przyjrzyj się dokładnie uzyskanym wynikom i upewnij się, że zrozumiałeś, dlaczego wartością danego testu jest True lub False.
- Utwórz przynajmniej 10 testów. Niech co najmniej pięć z nich przyjmuje wartość True, a kolejne pięć wartość False.
5.2. Więcej testów warunkowych.
Nie musisz ograniczać się tylko do 10 testów. Jeżeli chcesz wypróbować inne porównania, utwórz następne testy i umieść je w pliku conditional_tests.py. Powinieneś otrzymać co najmniej po jednym wyniku True i False dla wymienionych poniżej testów:
- Sprawdzenie równości i nierówności ciągów tekstowych.
- Test z użyciem funkcji lower().
- Testy liczbowe obejmujące sprawdzenie równości i nierówności, operacje większy niż i mniejszy niż, a także większy niż lub równy i mniejszy niż lub równy.
- Testy wykorzystujące słowa kluczowe and i or.
- Sprawdzanie, czy element znajduje się na liście.
- Sprawdzanie, czy element nie znajduje się na liście.
5.3. Kolory obcych, część 1.
Wyobraź sobie zestrzelenie obcego w grze. Utwórz zmienną o nazwie alien_color i przypisz jej wartość 'zielony', 'żółty' lub 'czerwony'.
- Przygotuj polecenie if sprawdzające, czy kolorem obcego jest zielony. Jeżeli tak, wyświetl komunikat informujący gracza, że zarobił pięć punktów.
- Przygotuj wersję programu zaliczającą powyższy test oraz drugą niezaliczającą. (Wersja kończąca się niepowodzeniem nie powinna generować żadnych danych wyjściowych).
5.4. Kolory obcych, część 2
Podobnie jak w ćwiczeniu 5.3 wybierz kolor dla obcego, a następnie utwórz konstrukcję if-else.
- Jeżeli kolor obcego to zielony, wyświetl komunikat informujący gracza, że zarobił pięć punktów za zestrzelenie tego obcego.
- Jeżeli kolor obcego jest inny niż zielony, wyświetl komunikat informujący gracza, że zarobił dziesięć punktów za zestrzelenie tego obcego.
- Przygotuj wersję programu wykonującą blok if oraz drugą wykonującą blok else.
5.5. Kolory obcych, część 3
Przygotowaną w ćwiczeniu 5.4 konstrukcję if-else zastąp konstrukcją if-elif-else.
- Jeżeli kolor obcego to zielony, wyświetl komunikat informujący gracza, że zarobił pięć punktów za zestrzelenie tego obcego.
- Jeżeli kolor obcego to żółty, wyświetl komunikat informujący gracza, że zarobił dziesięć punktów za zestrzelenie tego obcego.
- Jeżeli kolor obcego to czerwony, wyświetl komunikat informujący gracza, że zarobił piętnaście punktów za zestrzelenie tego obcego.
- Przygotuj trzy wersje programu i upewnij się, że każdy komunikat zostanie wyświetlony dla odpowiedniego koloru zestrzelonego obcego.
5.6. Etapy życia
Przygotuj konstrukcję if-else ustalającą etap życia danej osoby. Przypisz wartość zmiennej age, a następnie:
- Jeżeli osoba ma mniej niż 2 lata, wyświetl komunikat informujący, że jest niemowlęciem.
- Jeżeli osoba ma co najmniej 2 lata, ale mniej niż 4, wyświetl komunikat informujący, że jest dzieckiem, które uczy się chodzić.
- Jeżeli osoba ma co najmniej 4 lata, ale mniej niż 13, wyświetl komunikat informujący, że jest dzieckiem.
- Jeżeli osoba ma co najmniej 13 lat, ale mniej niż 20, wyświetl komunikat informujący, że jest nastolatkiem.
- Jeżeli osoba ma co najmniej 20 lat, ale mniej niż 65, wyświetl komunikat informujący, że jest dorosłym.
- Jeżeli osoba ma co najmniej 65 lat, wyświetl komunikat informujący, że jest seniorem.
5.7. Ulubione owoce
Przygotuj listę ulubionych owoców. Następnie utwórz serię niezależnych poleceń if sprawdzających obecność określonych owoców na liście.
- Utwórz listę o nazwie favorite_fruits i umieść na niej trzy ulubione owoce.
- Utwórz pięć poleceń if. Każde powinno sprawdzać obecność na
liście
określonego rodzaju owocu. Jeżeli owoc znajduje się na liście, w bloku
if należy wyświetlić komunikat w stylu:
„Naprawdę lubisz banany!”
.
5.8. Witaj, administratorze
.Przygotuj listę przynajmniej pięciu nazw użytkowników, zawierającą między innymi nazwę admin. Wyobraź sobie, że tworzysz kod odpowiedzialny za powitanie użytkownika po jego zalogowaniu się w witrynie internetowej. Przeprowadź iterację przez pętlę i dla każdego użytkownika wyświetl powitanie.
- Jeżeli nazwa użytkownika to admin, wyświetl powitanie
specjalne w stylu:
„Witaj, admin! Czy chcesz przejrzeć dzisiejszy raport?”.
- Dla pozostałych użytkowników wyświetl zwykłe powitanie w stylu:
„Witaj, Eryk! Dziękujemy, że ponownie się zalogowałeś”
.
5.9. Brak użytkowników
Do przygotowanego w poprzednim ćwiczeniu pliku hello_admin.py dodaj polecenie if sprawdzające, czy lista użytkowników nie jest pusta.
- Jeżeli lista jest pusta, wyświetl komunikat w stylu: „Musimy znaleźć jakichś użytkowników!”.
- Usuń wszystkich użytkowników z listy i upewnij się, że powyższy komunikat został prawidłowo wyświetlony.
5.10. Sprawdzanie nazw użytkowników
Wykonaj poniższe działania w celu utworzenia programu symulującego sposób, w jaki witryna internetowa gwa- rantuje, że każdy użytkownik będzie miał unikatową nazwę.
- Utwórz listę o nazwie current_users i umieść na niej przynajmniej pięć nazw użytkowników.
- Utwórz kolejną listę o nazwie new_users. Upewnij się, że przynajmniej jedna nazwa użytkownika z nowej listy znajduje się także na liście current_users.
- Przeprowadź iterację przez nową listę, aby sprawdzić, czy dana nazwa użytkownika została już wcześniej użyta. Jeśli tak, wyświetl użytkownikowi komunikat o konieczności wyboru innej nazwy. Natomiast jeśli dana nazwa użytkownika nie została wcześniej użyta, wyświetl użytkownikowi komunikat informujący o możliwości jej wykorzystania.
- Upewnij się, że w trakcie porównywania nazw użytkowników wielkość liter nie ma znaczenia. Jeżeli wcześniej użyto nazwy 'Janek', nowy użytkownik nie może wybrać dla siebie nazwy 'JANEK'. (To wymaga utworzenia kopii listy current_users zawierającej zapisane małymi literami nazwy wszystkich użytkowników).
5.11. Liczby porządkowe
Liczby porządkowe wskazują położenie elementu na liście, na przykład pierwszy, drugi, trzeci. W języku angielskim większość tego rodzaju liczb kończy się na th, poza liczbami 1, 2 i 3.- Utwórz listę przechowującą liczby od 1 do 9.
- Przeprowadź iterację przez listę.
- Wykorzystaj konstrukcję if-elif-else wewnątrz pętli do
prawidłowego
wyświetlenia liczb porządkowych w języku angielskim. Wygenerowane
dane wyjściowe powinny mieć postać
1st, 2nd, 3rd, 4th, 5th, 6th, 7th, 8th, 9th
i a każda liczba powinna znajdować się w osobnym wierszu.
5.12. Nadanie stylu konstrukcji if
Przejrzyj programy utworzone w tym rozdziale i upewnij się, że zastosowałeś w nich odpowiednie formatowanie testów warunkowych.
5.13. Twoje pomysły
Na tym etapie masz już znacznie większe możliwości w zakresie programowania niż na początku książki. Powinieneś już wyraźniej dostrzegać, jak rzeczywiste sytuacje mogą być modelowane w programach. Możesz więc zastanowić się nad problemami, które chciałbyś rozwiązywać we własnych programach. Zanotuj nowe idee dotyczące problemów, które chciałbyś rozwiązać, gdy zdobędziesz jeszcze większe umiejętności w zakresie programowania. Zastanów się nad grami, które chciałbyś stworzyć, zbiorami danych, które chciałbyś przeanalizować, lub aplikacjami internetowymi, które chciałbyś zbudować.
Rozdział 6:
6.1. Osoba
Wykorzystaj słownik do przechowywania informacji o znanej Ci osobie. W słowniku powinny znaleźć się informacje takie jak imię, nazwisko, wiek i miasto zamieszkania. Powinieneś więc utworzyć klucze first_name, last_name, age i city. Następnie wyświetl wszystkie informacje przechowywane w słowniku.
6.2. Ulubione liczby
Wykorzystaj słownik do przechowywania ulubionych liczb różnych osób. Weź pod uwagę pięć osób i ich imion użyj w charakterze kluczy słownika. Następnie ustal ich ulubione liczby i umieść je w słowniku, przypisując każdej osobie po jednej liczbie. Wyświetl imiona wszystkich osób i ich ulubione liczby. Jeżeli chcesz mieć więcej frajdy podczas wykonywania tego ćwiczenia, zapytaj przyjaciół o ich ulubione liczby i umieść w programie rzeczywiste dane.
6.3. Glosariusz
Słownik Pythona można wykorzystać do przygotowania rzeczy- wistego słownika. Jednak w celu uniknięcia niejasności nazwiemy go glosa- riuszem.
- Wypisz sobie pięć słów z dziedziny programowania, które poznałeś we wcześniejszych rozdziałach. Te słowa będą kluczami w glosariuszu, natomiast wartościami będą znaczenia poszczególnych słów.
- Każde słowo i jego znaczenie wyświetl w postaci elegancko sformatowanych danych wyjściowych. Możesz w jednym wierszu wyświetlić słowo, dwukropek i później wyjaśnienie danego słowa. Ewentualnie słowo umieść w jednym wierszu, a jego wyjaśnienie w następnym, wciętym wierszu. Do wstawienia pustego wiersza między parami słowo-definicja użyj znaku nowego wiersza (\n).
6.4. Glosariusz 2
Skoro już wiesz, jak można przeprowadzić iterację przez słownik, to zmodyfikuj kod ćwiczenia 6.3 z wcześniejszej części rozdziału. Zastąp serię wywołań print() pętlą przeprowadzającą iterację przez klucze i wartości słownika. Po upewnieniu się, że pętla działa prawidłowo, do glosariusza dodaj kolejnych pięć terminów związanych z Pythonem. Kiedy ponownie uruchomisz program, nowo dodane terminy i ich definicje powinny zostać automatycznie uwzględnione w wyświetlonych danych wyjściowych.
6.5. Rzeki
Utwórz słownik zawierający trzy ważne rzeki oraz kraje, przez które one płyną. Jedna z par klucz-wartość może mieć postać 'nil': 'egipt'.
- Wykorzystaj pętlę do wyświetlenia zdania o każdej rzece, na przykład: „Nil przepływa przez Egipt”.
- Wykorzystaj pętlę do wyświetlenia nazw wszystkich rzek przechowywanych w słowniku.
- Wykorzystaj pętlę do wyświetlenia nazw wszystkich państw przechowywanych w słowniku.
6.6. Ankieta
Użyj kodu znajdującego się w programie favorite_languages.py, utworzonym nieco wcześniej w tym rozdziale.
- Utwórz listę osób, które powinny wziąć udział w ankiecie dotyczącej ulubionego języka programowania. Umieść na niej pewne osoby, które już znajdują się w słowniku, oraz te, które jeszcze nie zostały zapisane w słowniku
- Przeprowadź iterację przez listę osób, które powinny wziąć udział w ankiecie. Jeżeli dana osoba już wzięła udział w ankiecie, wyświetl komunikat z podziękowaniem za jej zaangażowanie. Natomiast jeśli dana osoba jeszcze nie udzieliła odpowiedzi w ankiecie, wyświetl komunikat z zaproszeniem do wzięcia w niej udziału.
6.7. Osoby.
Pracę rozpocznij od programu stworzonego w ćwiczeniu 6.1 we wcześniejszej części rozdziału. Utwórz dwa nowe słowniki przedstawiające różne osoby, a następnie wszystkie trzy słowniki umieść na liście o nazwie people. Przeprowadź iterację przez listę osób i wyświetl wszystkie informacje o poszczególnych osobach.
6.8. Zwierzęta.
Utwórz kilka słowników i nadaj im nazwy zwierząt. W poszczególnych słownikach umieść informacje o zwierzętach będących ich właścicielami. Następnie te słowniki powinny znaleźć się na liście o nazwie pets. Teraz przeprowadź iterację przez listę i wyświetl wszystkie informacje o poszczególnych zwierzętach.6.9. Ulubione miejsca.
Utwórz słownik o nazwie favorite_places. Pomyśl o trzech imionach i użyj ich jako kluczy słownika. Każdej osobie przypisz po trzy ulubione miejsca. Aby ćwiczenie stało się jeszcze bardziej interesujące, możesz poprosić przyjaciół o podanie ulubionych miejsc. Przeprowadź iterację przez słownik i wyświetl imiona wszystkich osób oraz ich ulubione miejsca.
6.10. Ulubione liczby
Zmodyfikuj program utworzony w ćwiczeniu 6.2 we wcześniejszej części rozdziału. Po zmianach każda osoba może mieć więcej niż tylko jedną ulubioną liczbę. Wyświetl wszystkie osoby oraz ich ulubione liczby.
Rozdział 7:
7.1. Wypożyczenie samochodu
Utwórz program, który pyta użytkownika, jakiej marki samochód chciałby wypożyczyć. Następnie wyświetl komunikat wraz z podaną nazwą samochodu, na przykład: „Chwileczkę, sprawdzę, czy mamy dostępny samochód Subaru”.
7.2. Stolik w restauracji
Utwórz program pytający klienta, na ile osób chce zarezerwować stolik. Jeżeli odpowiedzią jest liczba większa niż 8, powinieneś wyświetlić komunikat o konieczności zaczekania na stolik. W przeciwnym razie poinformuj klienta, że stolik jest gotowy.
7.3. Wielokrotność dziesięciu
Poproś użytkownika o podanie dowolnej liczby, a następnie sprawdź, czy jest ona wielokrotnością liczby 10.
7.4. Dodatki do pizzy
Utwórz pętlę proszącą użytkownika o podanie serii dodatków do pizzy. Działanie pętli powinno zostać zakończone, kiedy zostanie wpisane słowo 'koniec'. Gdy użytkownik będzie podawał kolejne dodatki, pętla powinna wyświetlać komunikat o dodaniu danego składnika do pizzy.
7.5. Bilety do kina
Cena biletu do kina jest uzależniona od wieku widza. Jeżeli widz ma poniżej 3 lat, bilet jest bezpłatny. Dla dzieci w wieku od 3 do 12 lat bilet kosztuje 10 zł. Dla osób wieku powyżej 12 lat cena biletu wynosi 15 zł. Utwórz pętlę proszącą użytkownika o podanie wieku, a następnie na podstawie otrzymanych danych wyświetl komunikat zawierający prawidłową cenę biletu.
7.6. Trzy wyjścia.
Przygotuj trzy różne wersje ćwiczenia 7.4 lub 7.5, z których każde będzie przynajmniej raz wykonywać poniższe zadania:
- Użycie testu warunkowego w pętli while do zatrzymania jej działania.
- Użycie zmiennej active do kontroli długości działania pętli while.
- Użycie polecenia break do opuszczenia pętli, gdy użytkownik wpisze 'koniec'.
7.7. Nieskończoność
Utwórz pętlę działającą w nieskończoność i uruchom ją. (W celu zakończenia tej pętli naciśnij klawisze Ctrl+C lub zamknij okno terminala wyświetlającego dane wyjściowe programu).
7.8. Bar
Przygotuj listę o nazwie sandwich_orders i umieść na niej nazwy różnych kanapek. Następnie przygotuj pustą listę o nazwie finished_sandwiches. Przeprowadź iterację przez listę zamówionych kanapek i wyświetl informację o danym zamówieniu, na przykład: „Przygotowano kanapkę z tuńczykiem”. Kiedy kanapka zostanie zrobiona, reprezentujący ją element powinien zostać przeniesiony na listę finished_sandwiches. Gdy lista sandwich_orders będzie już pusta, wyświetl komunikat zawierający listę wszystkich zrobionych kanapek.
7.9. Brak pastrami
Wykorzystaj listę sandwich_orders z ćwiczenia 7.8 i upewnij się, że na liście przynajmniej trzykrotnie pojawia się kanapka z pastrami. Gdzieś na początku programu umieść kod wyświetlający komunikat, że w barze skończyło się pastrami, a następnie za pomocą pętli while usuń wszystkie wystąpienia pastrami z listy sandwich_orders. Upewnij się, że żadna kanapka z pastrami nie zostanie umieszczona na liście finished_sandwiches.
7.10. Wymarzone wakacje
Przygotuj program pytający użytkowników o ich wymarzone wakacje. Program powinien wyświetlać pytanie w stylu: „Jeżeli mógłbyś odwiedzić jedno dowolne miejsce na świecie, gdzie byś pojechał?”. Umieść w programie blok kodu odpowiedzialny za wyświetlenie wyników przeprowadzonej ankiety.
Rozdział 8:
8.1. Komunikat
Utwórz funkcję o nazwie display_messages() wyświetlającą jedno zdanie informujące o tym, czego się uczysz w tym rozdziale. Wywołaj przygotowaną funkcję i upewnij się, że komunikat został prawidłowo wyświetlony.
8.2. Ulubiona książka
Utwórz funkcję o nazwie favorite_book(), która akcep- tuje jeden parametr title. Ta funkcja powinna wyświetlać komunikat w stylu: „Jedną z moich ulubionych książek jest Alicja w krainie czarów”. Wywołaj tę funkcję i upewnij się, że podałeś tytuł książki jako argument.
8.3. T-shirt
Utwórz funkcję o nazwie make_shirt(), akceptującą wielkość koszulki oraz tekst, który ma zostać na niej nadrukowany. Funkcja powinna wyświetlić zdanie zawierające informacje dotyczące zamówionej koszulki: jej rozmiar i tekst do wydrukowania na niej. W trakcie pierwszego wywołania funkcji do przygotowania koszulki zastosuj argumenty pozycyjne. Natomiast w trakcie drugiego wywołania użyj argumen- tów w postaci słów kluczowych.
8.4. Duże koszulki
Zmodyfikuj funkcję make_shirt() tak, aby domyślnie były przygotowywane duże koszulki z nadrukowanym tekstem „Uwielbiam Pythona”. Utwórz koszulki w rozmiarze dużym i średnim (obie z domyślnym tekstem) oraz koszulkę w dowolnym rozmiarze i z innym tekstem nadrukowanym na niej.
8.5. Miasta
Utwórz funkcję o nazwie describe_city(), akceptującą nazwę miasta i kraju. Ta funkcja powinna wyświetlać proste zdanie, takie jak „Warszawa leży w Polsce”. Parametrowi przechowującemu nazwę państwa przypisz wartość domyślną. Przygotowaną funkcję wywołaj dla trzech różnych miast, z których przynajmniej jedno nie powinno być położone w domyślnie zdefiniowanym kraju.
8.6. Nazwy miast
Utwórz funkcję o nazwie city_country() pobierającą nazwę miasta i kraju, w którym ono leży. Wartością zwrotną funkcji powinien być ciąg tekstowy sformatowany w poniższy sposób: Santiago, Chile Przygotowaną funkcję wywołaj z przynajmniej trzema parami miasto-państwo i wyświetl wygenerowaną przez nie wartość.
8.7. Album
Utwórz funkcję o nazwie make_album() odpowiedzialną za zbudowanie słownika reprezentującego album muzyczny. Funkcja powinna pobrać nazwę zespołu lub artysty oraz tytuł albumu. Wartością zwrotną funkcji powinien być słownik zawierający te dwa fragmenty informacji. Za pomocą przygotowanej funkcji utwórz trzy słowniki przedstawiające różne albumy. Wyświetl każdą wartość zwrotną, aby pokazać, że słowniki prawidłowo przechowują informacje o albumach. Wykorzystując wartość specjalną None, do funkcji make_album() dodaj opcjonalny parametr pozwalający na przechowywanie liczby utworów znajdujących się na płycie. Jeżeli wywołanie funkcji będzie zawierało wartość dla liczby utworów, należy ją dodać do słownika informacji o albumie. Zdefiniuj co najmniej jedno nowe wywołanie funkcji obejmujące także liczbę utworów na płycie.
8.8. Albumy użytkowników
Pracę rozpocznij od programu utworzonego w ćwiczeniu 8.7. Dodaj pętlę while pozwalającą użytkownikom na wprowa- dzenie artysty i tytułu płyty. Po zebraniu tych informacji wywołaj funkcję make_album() wraz z podanymi przez użytkownika danymi wejściowymi oraz wyświetl słownik utworzony przez program. Upewnij się, że zdefiniowałeś war- tość pozwalającą opuścić pętlę while.
8.9. Komunikaty
Przygotuj listę zawierającą serię krótkich komunikatów, a następnie przekaż ją do funkcji o nazwie show_messages(), która powinna wyświetlić każdy komunikat umieszczony na tej liście.8.10. Wysyłanie komunikatów
Pracę rozpocznij od kopii programu z ćwiczenia 8.9. Następnie utwórz funkcję o nazwie send_messages(), której zadaniem będzie wyświetlenie wszystkich komunikatów, a następnie przeniesienie ich na nową listę o nazwie sent_messages. Po wywołaniu funkcji należy wyświetlić obie listy i upewnić się o prawidłowym przeniesieniu komunikatów.
8.11. Zarchiwizowane komunikaty
Pracę rozpocznij od kodu utworzonego w ćwiczeniu 8.10. Wywołaj funkcję send_messages() wraz z kopią listy komunikatów. Po wywołaniu funkcji wyświetl obie listy, aby pokazać istnienie pierwotnej listy z zachowanymi komunikatami.
8.12. Kanapki
Utwórz funkcję akceptującą listę składników, które klient chce umieścić w zamawianej kanapce. Funkcja powinna zawierać jeden parametr przechowujący dowolną liczbę argumentów przekazanych w wywołaniu funkcji oraz wyświetlać podsumowanie dotyczące zamówionej kanapki. Przygotowaną funkcję wywołaj trzykrotnie, za każdym razem z inną liczbą argumentów.
8.13. Profil użytkownika
Pracę rozpocznij od kopii programu user_profile.py utworzonego nieco wcześniej w tym rozdziale. Przygotuj własny profil przez wywołanie funkcji build_profile(), podaj imię, nazwisko oraz trzy inne pary klucz-wartość, które Cię opisują.
8.14. Samochody
Utwórz funkcję przechowującą w słowniku informacje o samochodzie. Ta funkcja zawsze powinna otrzymywać nazwy marki i modelu pojazdu, po którym można podać dowolną liczbę argumentów w postaci słów kluczowych. Wywołaj funkcję zawierającą wymagane informacje oraz dwie dodatkowe pary nazwa-wartość, na przykład opisujące kolor i wyposażenie dodatkowe. Przygotowana funkcja powinna być wywoływana w sposób podobny do przedstawionego poniżej:
car = make_car('subaru', 'outback', color='blue', tow_package=True)
Wyświetl zawartość słownika zwróconego przez tę funkcję i upewnij się, że wszystkie podane informacje zostały w nim prawidłowo zapisane.
8.15. Wydruk modeli
Funkcje z programu print_models.py umieść w oddzielnym pliku o nazwie printing_functions.py. Na początku pliku print_models.py umieść polecenie import i zmodyfikuj plik w taki sposób, aby używać zaimportowanych funkcji.
8.16. Polecenia importu
Wykorzystaj utworzony przez siebie program z jedną funkcją i przenieś ją do oddzielnego pliku. Zaimportuj tę funkcję w pliku programu głównego, a następnie wywołaj funkcję na wszystkie wymienione poni- żej sposoby:
import nazwa_modułu from nazwa_modułu import nazwa_funkcji from nazwa_modułu import nazwa_funkcji as fn import nazwa_modułu as mn from nazwa_modułu import *
8.17. Nadanie stylu funkcjom
Wybierz trzy dowolne programy utworzone w tym rozdziale i upewnij się, że są w nich stosowane przedstawione w tym podrozdziale konwencje dotyczące nadawania stylu funkcjom.
Rozdział 9:
9.1. Restauracja
Przygotuj klasę o nazwie Restaurant. Metoda __init__() w klasie Restaurant powinna przechowywać dwa atrybuty: restaurant_name i cuisine_type. Utwórz metodę o nazwie describe_restaurant() wyświetlającą te dwa fragmenty informacji oraz metodę o nazwie open_restaurant() wyświetlającą informacje o godzinach pracy restauracji. Na podstawie przygotowanej klasy utwórz egzemplarz restaurant. Wyświetl oddzielnie oba atrybuty, a następnie wywołaj obie metody.
9.2. Trzy restauracje
Pracę rozpocznij od klasy opracowanej w ćwiczeniu 9.1. Utwórz trzy różne egzemplarze na podstawie tej klasy, a następnie wywołaj metodę describe_restaurant() dla każdego egzemplarza.
9.3. Użytkownicy
Przygotuj klasę o nazwie User. Zdefiniuj w niej dwa atrybuty (first_name i last_name), a następnie utwórz kilka innych atrybutów, które zwykle są przechowywane w profilu użytkownika. Zdefiniuj metodę o nazwie describe_user(), wyświetlającą podsumowanie informacji zebranych o użytkowniku. Utwórz jeszcze drugą metodę o nazwie greet_user(), która będzie wyświetlała użytkownikowi spersonalizowane powitanie. Utwórz kilka egzemplarzy reprezentujących różnych użytkowników, a następnie dla każdego z nich wywołaj obie metody.
9.4. Liczba obsłużonych
Pracę rozpocznij od programu utworzonego w ćwiczeniu 9.1. Dodaj atrybut o nazwie number_served o wartości domyślnej 0. Następnie na podstawie klasy utwórz egzemplarz o nazwie restaurant. Wyświetl liczbę klientów obsłużonych przez restaurację, zmień tę wartość i później wyświetl nową. Dodaj metodę o nazwie set_number_served(), pozwalającą na zdefiniowanie liczby obsłużonych klientów. Wywołaj tę metodę wraz z różnymi wartościami i je wyświetl. Dodaj metodę o nazwie increment_number_served(), pozwalającą na inkrementację wartości wskazującej na liczbę obsłużonych klientów. Wywołaj tę metodę dowolną ilość razy, symulując w ten sposób liczbę klientów obsłużonych na przykład w ciągu dnia roboczego.
9.5. Próby logowania
Pracę rozpocznij od programu utworzonego w ćwiczeniu 9.3. Do klasy User dodaj metodę o nazwie increment_login_attempts(), pozwalający na inkrementację wartości login_attempts o 1. Utwórz drugą metodę o nazwie reset_login_attempts(), która będzie zerowała wartość login_attempts. Utwórz egzemplarz klasy User i kilkukrotnie wywołaj metodę increment_login_attempts(). Wyświetl wartość login_attempts, aby mieć pewność o jej prawidłowej inkrementacji. Następnie wywołaj metodę reset_login_attempts(). Ponownie wyświetl wartość login_attempts i sprawdź, czy na pewno wynosi 0.
9.6. Budka z lodami
Budka z lodami to szczególny rodzaj restauracji. Zdefiniuj klasę o nazwie IceCreamStand dziedziczącą po klasie Restaurant utworzonej w ćwiczeniu 9.1 lub 9.4. Dowolna wersja wymienionej klasy będzie się sprawdzać — po prostu wybierz jedną z nich. Dodaj atrybut o nazwie flavors, przechowujący listę różnych smaków lodów. Zdefiniuj metodę wyświetlającą dostępne smaki lodów. Utwórz egzemplarz klasy IceCreamStand i wywołaj nową metodę.
9.7. Admin
Administrator to specjalny rodzaj użytkownika. Zdefiniuj klasę o nazwie Admin dziedziczącą po klasie User utworzonej w ćwiczeniu 9.3 lub 9.5. Dodaj atrybut privileges przechowujący listę ciągów tekstowych takich jak „może dodać post”, „może usunąć post” czy „może zbanować użytkownika”. Zdefiniuj metodę o nazwie show_privileges(), wyświetlającą listę uprawnień administratora. Utwórz egzemplarz klasy Admin i wywołaj nową metodę.
9.8. Uprawnienia
Zdefiniuj oddzielną klasę Privileges. Ta klasa powinna mieć jeden atrybut (privileges), przechowujący listę ciągów tekstowych, tak jak przedstawiłem to w poprzednim ćwiczeniu. Metodę show_privileges() przenieś do nowej klasy. Utwórz egzemplarz klasy Privileges jako atrybut w klasie Admin. Następnie utwórz nowy egzemplarz klasy Admin i użyj metody show_privileges() do wyświetlenia uprawnień.
9.9. Uaktualnienie akumulatora
Pracę rozpocznij od ostatniej wersji programu electric_car.py utworzonej w tym podrozdziale. Do klasy Battery dodaj nową metodę o nazwie upgrade_battery(). Ta metoda powinna sprawdzić pojemność akumulatora i ustawić ją na 100, jeśli aktualnie jest inna. Utwórz egzemplarz samochodu o napędzie elektrycznym wraz z akumulatorem o domyślnej pojemności, wywołaj metodę get_range(), a następnie metodę upgrade_battery() i ponownie get_range(). Powinieneś zauważyć zwiększenie zasięgu samochodu.
9.10. Zaimportowana klasa Restaurant
Przenieś do modułu ostatnią wersję klasy Restaurant i utwórz oddzielny plik importujący tę klasę. Utwórz egzemplarz klasy Restaurant, a następnie wywołaj metodę tej klasy, aby sprawdzić, czy polecenie import działa prawidłowo.
9.11. Zaimportowana klasa Admin
Pracę rozpocznij od ćwiczenia 9.8. W jednym module umieść klasy User, Privileges i Admin. Przygotuj oddzielny plik, utwórz w nim egzemplarz klasy Admin i wywołaj metodę show_privileges(), aby sprawdzić, czy wszystko działa prawidłowo.
9.12. Wiele modułów
Klasę User umieść w jednym module, natomiast Privileges i Admin w oddzielnym. Następnie w innym pliku utwórz egzemplarz klasy Admin i wywołaj metodę show_privileges(), aby sprawdzić, czy wszystko działa prawidłowo.
9.13. Kości do gry
Przygotuj klasę Die z jednym atrybutem o nazwie sides, którego wartością domyślną będzie 6. Utwórz metodę o nazwie roll_die(), wyświetlającą losowo wygenerowaną liczbę z zakresu od 1 do wartości określonej przez liczbę ścianek na kości do gry. Utwórz kość zawierającą sześć ścianek i zasymuluj rzucenie nią 10 razy. Później utwórz kości zawierające 10 i 20 ścianek. Każdą nową kością rzuć 10 razy.
9.14. Loteria
Utwórz listę lub krotkę zawierającą serię dziesięciu liczb i pięciu liter. Losowo wybierz cztery liczby lub litery z listy, a następnie wyświetl komunikat informujący, że kupon zawierający liczby lub litery dopasowane do wylosowanych wygrywa nagrodę.
9.15. Analiza loterii
Wykorzystaj pętlę do ustalenia, jak trudno jest wygrać w loterii, którą modelowałeś w poprzednim ćwiczeniu. Utwórz listę lub krotkę o nazwie my_ticket. Następnie zdefiniuj pętlę losującą liczby dopóty, dopóki nie zostaną dopasowane do Twojego kuponu. Wyświetl komunikat informujący, ile iteracji pętli trzeba było wykonać, zanim padły liczby znajdujące się na Twoim kuponie.
9.16. Moduł Pythona tygodnia
Jednym z doskonałych zasobów pomagających w poznaniu biblioteki standardowej Pythona jest witryna Python Module of the Week. Przejdź na stronę https://pymotw.com/3/ i przejrzyj spis treści. Wybierz moduł, który wygląda interesująco, i przeczytaj informacje na jego temat. Przejrzyj również dokumentację dotyczącą modułu random.
Rozdział 10:
10.1. Poznajemy Pythona
W edytorze tekstu utwórz pusty plik i wpisz w nim kilka zdań podsumowujących to, czego się dotąd nauczyłeś o języku Python. Każdy wiersz rozpocznij od wyrażenia „W Pythonie można...”. Plik zapisz pod nazwą learning_python.txt w tym samym katalogu, w którym umieszczasz ćwiczenia z tego rozdziału. Przygotuj program odczytujący powyższy plik i trzykrotnie wyświetlający jego zawartość. Treść pliku powinna być wyświetlona raz przez odczytanie całego pliku, raz za pomocą iteracji przez obiekt pliku oraz raz przez umieszczenie wierszy na liście, a następnie przetworzenie listy poza blokiem with.
10.2. Poznajemy C
Metodę replace() można wykorzystać do zastąpienia dowolnego słowa w ciągu tekstowym zupełnie innym słowem. Oto krótki przykład pokazujący, jak w zdaniu słowo pies zastąpić słowem kot:
>>> message = "Moje ulubione zwierzę to pies." >>> message.replace('pies', 'kot') 'Moje ulubione zwierzę to kot.'
Odczytaj każdy wiersz tekstu w utworzonym wcześniej pliku learning_python.txt, a następnie wszystkie wystąpienia słowa Python zastąp nazwą innego języka programowania, na przykład C. Każdy zmodyfikowany wiersz wyświetl na ekranie.
10.3. Gość
Utwórz program, który poprosi użytkownika o podanie imienia. Gdy użytkownik je wprowadzi, zapisz to imię w pliku o nazwie guest.txt.
10.4. Księga gości
Utwórz pętlę while, w której każdy użytkownik będzie musiał podać swoje imię. Gdy użytkownik je wprowadzi, na ekranie wyświetl komunikat powitania, a do pliku o nazwie guest_book.txt dodaj wiersz rejestrujący odwiedzenie Twojej strony przez tego użytkownika. Upewnij się, że każdy wpis jest umieszczany w nowym wierszu w pliku.
10.5. Ankieta dotycząca programowania
Utwórz pętlę while, w której użytkownicy będą musieli udzielić odpowiedzi na pytanie: „Dlaczego lubisz programowanie?”. Każdą otrzymaną odpowiedź dodaj do pliku przechowującego wszystkie udzielone odpowiedzi.
10.6. Dodawanie
Jeden z najczęściej pojawiających się problemów podczas pobierania danych liczbowych polega na tym, że użytkownicy podają tekst zamiast liczb. Kiedy tego rodzaju dane wejściowe spróbujesz skonwertować na typ int, otrzymasz błąd ValueError. Utwórz program, który prosi użytkownika o podanie dwóch liczb. Dodaj je i wyświetl wynik. Przechwyć błąd ValueError, jeżeli którakolwiek wartość przekazana w danych wejściowych nie jest liczbą, i wyświetl odpowiedni komunikat błędu. Przetestuj program, najpierw podając dwie liczby, a później pewien tekst zamiast liczby.
10.7. Kalkulator dodawania
Kod przygotowany w ćwiczeniu 10.6 opakuj pętlą while, aby użytkownik mógł kontynuować wprowadzanie liczb nawet po popełnieniu błędu i podaniu tekstu zamiast liczby.
10.8. Koty i psy
Utwórz dwa pliki o nazwach cats.txt i dogs.txt. W pierwszym pliku umieść przynajmniej trzy imiona kotów, natomiast w drugim przynajmniej trzy imiona psów. Przygotuj program próbujący odczytać zawartość tych plików i wyświetlić ją na ekranie. Zastosuj w kodzie konstrukcję try-except aby przechwycić wszelkie błędy typu FileNotFoundError i wyświetlić użytkownikowi odpowiedni komunikat błędy, gdy żądany plik nie istnieje. Jeden z utworzonych wcześniej plików przenieś do innego katalogu w systemie i upewnij się, że opracowany blok except w programie działa prawidłowo.
10.9. Ciche koty i psy
Blok except w programie utworzonym w poprzednim ćwiczeniu zmodyfikuj w taki sposób, aby brak pliku powodował jedynie ciche niepowodzenie.
10.10. Najczęściej występujące słowa.
Odwiedź witrynę projektu Gutenberg (http://www.gutenberg.org/) i wybierz kilka innych książek, które chciałbyś przeanalizować. Pobierz pliki tekstowe tych dzieł lub niezmodyfikowany zwykły tekst skopiuj z przeglądarki internetowej do pliku tekstowego w komputerze. Za pomocą metody count() możesz sprawdzić, ile razy dane słowo lub wyrażenie występuje w ciągu tekstowym. Na przykład w przedstawionym poniżej fragmencie kodu sprawdzamy, ile razy słowo za występuje w ciągu tekstowym:
>>> line = "Za górami, za lasami, za dolinami pobili się dwaj górale ciupagami." >>> line.count('za') 2 >>> line.lower().count('za') 3
Zwróć uwagę na to, że konwersja ciągu tekstowego na zapisany małymi literami (do tego służy funkcja lower(), którą poznałeś już wcześniej) powoduje przechwycenie wszystkich wystąpień sprawdzanego słowa niezależnie od sposobu jego formatowania. Utwórz program odczytujący pobrane wcześniej z projektu Gutenberg pliki tekstowe, a następnie określający, ile razy słowo the występuje w każdym z nich. Otrzymany wynik będzie jedynie przybliżony, ponieważ uwzględnia również słowa zawierające 'za', np. 'zachód' lub 'zabawa'. Spróbuj zliczyć wystąpienia 'za ' (wraz ze spacją w ciągu tekstowym) i zobacz, o ile mniejsza będzie to liczba.
10.11. Ulubiona liczba
Utwórz program, który prosi użytkownika o podanie
ulubionej liczby. Za pomocą funkcji json.dump() zapisz tę liczbę w
pliku.
Następnie utwórz oddzielny program odczytujący ulubioną liczbę użytkownika i
wyświetlający komunikat w stylu:
„Znam Twoją ulubioną liczbę, to _____”.
10.12. Zapamiętana ulubiona liczba
Oba programy utworzone w poprzednim ćwiczeniu połącz w jednym pliku. Jeżeli ulubiona liczba została zapisana w pliku, wyświetl ją użytkownikowi. W przeciwnym razie poproś użytkownika o podanie ulubionej liczby i zapisz ją w pliku. Uruchom ten program dwukrotnie i upewnij się, że działa prawidłowo.
10.13. Weryfikacja użytkownika.
W ostatniej wersji programu remember_me.py przyjęto założenie, że użytkownik już wcześniej podał swoje imię, lub też program został uruchomiony po raz pierwszy. Powinniśmy zmodyfikować ten program na wypadek, gdyby bieżący użytkownik nie był tą osobą, która ostatnio korzystała z tego programu. W funkcji greet_user(), zanim za pomocą odpowiedniego komunikatu powitasz istniejącego już użytkownika, zapytaj go, czy podane imię jest poprawne. Jeżeli nie jest, należy wywołać funkcję get_new_username() w celu użycia prawidłowego imienia.
Rozdział 11:
11.1. Miasto, państwo
Przygotuj funkcję akceptującą dwa parametry: nazwy miasta i państwa. Wartością zwrotną tej funkcji powinien być pojedynczy ciąg tekstowy w postaci Miasto, Państwo, na przykład Santiago, Chile. Gotową funkcję umieść w module o nazwie city_functions.py. Utwórz plik o nazwie test_cities.py przeznaczony do przetestowania przygotowanej wcześniej funkcji (pamiętaj o konieczności zaimportowania modułu unittest oraz funkcji, która ma zostać sprawdzona). Następnie w pliku test_cities.py zdefiniuj funkcję o nazwie test_city_country() odpowiedzialną za sprawdzenie, czy wywołanie utworzonej w poprzednim ćwiczeniu funkcji, na przykład z wartościami santiago i chile, spowoduje wygenerowanie oczekiwanego ciągu tekstowego. Uruchom plik test_cities.py i upewnij się, że test test_city_country() zostaje zaliczony.
11.2. Populacja
Zmodyfikuj przygotowaną wcześniej funkcję, aby wymagała podania trzeciego argumentu — populacji (population). Teraz wartością zwrotną funkcji powinien być ciąg tekstowy w postaci Miasto, Państwo - populacja xxx, na przykład Santiago, Chile - populacja 5000000. Ponownie uruchom test_cities.py. Upewnij się, że tym razem test zdefiniowany w metodzie test_city_country() będzie niezaliczony. Zmodyfikuj funkcję, aby parametr population był opcjonalny. Ponownie uruchom test_cities.py i upewnij się, że również teraz test zdefiniowany w metodzie test_city_country() zostanie zaliczony. Utwórz drugi test o nazwie test_city_country_population(), sprawdzający, czy można wywołać funkcję z wartościami 'santiago', 'chile' i 'population=5000000'. Raz jeszcze uruchom test_cities.py i upewnij się, że nowy test został zaliczony.
11.3. Pracownik
Przygotuj klasę o nazwie Employee. Metoda __init__() powinna pobierać imię, nazwisko i roczne wynagrodzenie, a następnie zapisywać te informacje w postaci atrybutów. Utwórz metodę o nazwie give_raise(), która spowoduje zwiększenie wynagrodzenia domyślnie o 5000 zł, choć zaakceptuje także inną kwotę. Przygotuj zestaw testów dla klasy Employee. Utwórz dwie metody testowe test_give_default_raise() i test_give_custom_raise(). Wykorzystaj metodę setUp(), aby uniknąć konieczności tworzenia nowego egzemplarza klasy Employee w każdej metodzie testowej. Wykonaj zestaw testów i upewnij się, że oba testy zostaną zaliczone.
Część II - Aplikacje internetowe
Rozdział 18:
18.1. Nowe projekty
Aby jeszcze lepiej poznać możliwości oferowane przez
framework Django, utwórz kilka pustych projektów i zobacz, z czego się
składają. Utwórz nowy katalog o prostej nazwie, takiej jak snap_gram
lub insta_chat
(na zewnątrz katalogu learning_log), przejdź do nowego katalogu w
powłoce
i utwórz środowisko wirtualne. Zainstaluj Django i wydaj polecenie
django-admin.py startproject snap_gram .
(upewnij się, że umieściłeś kropkę na końcu polecenia).
Zajrzyj do plików i katalogów utworzonych przez powyższe polecenie i
porównaj je z zawartością projektu Learning Log. Procedurę powtórz
kilkukrotnie, aż będziesz wiedzieć, co Django tworzy w nowym projekcie.
Następnie usuń katalogi niepotrzebnych Ci projektów.
18.2. Krótkie wpisy
Metoda __str__() w modelu Entry aktualnie powoduje dołączenie wielokropka do każdego egzemplarza klasy Entry, gdy Django wyświetla go w witrynie administracyjnej bądź w powłoce. Do wymienionej metody dodaj polecenie if, które spowoduje dodanie wielokropka tylko dla wpisów dłuższych niż 50 znaków. Za pomocą witryny administracyjnej dodaj wpis krótszy niż 50 znaków i sprawdź, czy w trakcie jego wyświetlania jest dołączany wielokropek.
18.3. API Django
Podczas tworzenia kodu pozwalającego uzyskać dostęp do danych w projekcie przygotowujesz tak zwane zapytanie. Przejrzyj dostępną na stronie https://docs.djangoproject.com/en/2.2/topics/db/queries/ dokumentację dotyczącą tworzenia zapytań pobierających dane. Większość informacji na podanej stronie będzie dla Ciebie nowością, ale staną się użyteczne, gdy zaczniesz pracować nad własnymi projektami.
18.4. Pizzeria
Utwórz nowy projekt o nazwie pizzeria wraz z aplikacją o nazwie pizzas. Zdefiniuj model Pizza wraz z atrybutem name, który będzie przechowywał wartości takie jak hawajska lub mięsna. Zdefiniuj drugi model o nazwie Topping wraz z atrybutami pizza i name. Atrybut pizza powinien być kluczem zewnętrznym dla modelu Pizza, natomiast atrybut name powinien przechowywać wartości takie jak ananas, bekon i sos. Zarejestruj oba modele w witrynie administracyjnej. W tej witrynie wprowadź pewne nazwy pizzy i dodatków. Za pomocą powłoki przejrzyj wprowadzone dane.
18.5. Jadłospis
Rozważ aplikację ułatwiającą użytkownikom przygotowanie jadłospisu na cały tydzień. Utwórz nowy katalog o nazwie meal_planner i rozpocznij w nim pracę nad nowym projektem Django. Następnie utwórz nową aplikację o nazwie meal_plans. Przygotuj prostą stronę główną dla tego projektu.
18.6. Strona główna pizzerii
Dodaj stronę główną do projektu pizzerii, nad którym pracę rozpocząłeś w ćwiczeniu 18.4.
18.7. Dokumentacja szablonów
Przejrzyj dokumentację szablonów Django, którą znajdziesz na stronie https://docs.djangoproject.com/en/2.2/ref/templates/. Zawsze możesz do niej powrócić, gdy będziesz pracować nad własnymi projektami.
18.8. Strony pizzerii.
Do projektu pizzerii utworzonego w ćwiczeniu 18.6 dodaj stronę wyświetlającą nazwy dostępnych rodzajów pizzy. Następnie połącz nazwę każdej pizzy ze stronę wyświetlającą dostępne dodatki do pizzy. Upewnij się, że użyłeś dziedziczenia szablonów, aby efektywnie tworzyć strony.
Rozdział 19:
19.1. Blog
Rozpocznij pracę nad nowym projektem Django o nazwie Blog. W tym projekcie utwórz aplikację o nazwie blogs, zdefiniuj w niej model BlogPost. Model powinien mieć kolumny takie jak title, text i date_added. Utwórz superużytkownika dla projektu, a następnie wykorzystaj witrynę administracyjną do przygotowania kilku krótkich postów. Strona główna powinna wyświetlać wszystkie posty w kolejności chronologicznej. Przygotuj jeden formularz pozwalający na tworzenie nowych postów oraz drugi przeznaczony do edycji już istniejących. Wypełnij formularze i upewnij się, że działają prawidłowo.
19.2. Konta bloga.
Do projektu bloga zapoczątkowanego w ćwiczeniu 19.1 dodaj systemu rejestracji i uwierzytelniania użytkowników. Upewnij się, że zalogowany użytkownik ma wyświetloną na ekranie swoją nazwę użytkownika, natomiast niezarejestrowany otrzymuje dostęp do strony pozwalającej mu na dokonanie rejestracji.
19.3. Refaktoryzacja
W pliku views.py mamy dwa miejsca, w których sprawdzamy, czy użytkownik będący właścicielem tematu to aktualnie zalogowa ny użytkownik. Kod odpowiedzialny za tego rodzaju sprawdzenie umieść w funkcji o nazwie check_topic_owner() i wywołuj ją, gdy zajdzie potrzeba.
19.4. Ochrona strony new_entry.
Użytkownik może dodać nowy wpis do tematu należącego do innego użytkownika. W tym celu wystarczy podać adres URL wraz z identyfikatorem tematu, którego właścicielem jest inny użytkownik. Zastosuj ochronę przed tego rodzaju atakami i sprawdź przed zapisaniem nowego wpisu, czy bieżący użytkownik jest właścicielem tematu, do którego ma zostać dodany ten wpis.
19.5. Ochrona bloga
W budowanym projekcie bloga upewnij się, że każdy post będzie powiązany z określonym użytkownikiem. Zagwarantuj, że wszystkie posty są dostępne publicznie, ale tylko zarejestrowani użytkownicy mogą dodawać nowe posty i edytować te istniejące. Zanim zostanie przetworzony formularz, w widoku pozwalającym użytkownikowi na edycję postu sprawdź, czy użytkownik edytuje własny post.
Rozdział 20:
20.1. Inne formularze
Style Bootstrapa zastosowaliśmy na stronach login i add_topic. Wprowadź podobne zmiany w pozostałych stronach opartych na formularzach: new_entry, edit_entry i register.
20.2. Nadanie stylu blogowi
Wykorzystaj bibliotekę Bootstrap do nadania stylów projektowi bloga, który utworzyłeś w ćwiczeniach do poprzedniego rozdziału.
20.3. Wdrożenie bloga
Przeprowadź wdrożenie w Heroku projektu bloga, nad którym pracujesz. Aby zapewnić wdrożonej aplikacji względne bezpieczeństwo, upewnij się, że przypisałeś opcji DEBUG wartość False, aby w przypadku problemów użytkownicy nie widzieli wyświetlonej pełnej strony błędu Django.
20.4. Więcej błędów 404
Funkcja get_object_or_404() powinna być używana również w widokach generowanych przez funkcje new_entry() i edit_entry(). Wprowadź odpowiednie zmiany, a następnie przetestuj je, podając adres URL taki jak http://localhost:8000/new_entry/999/ i sprawdzając, czy na pewno otrzymujesz komunikat błędu o kodzie 404.
20.5. Rozbudowa aplikacji Learning Log
Dodaj jedną funkcję do aplikacji Learning Log, a następnie przekaż zmiany do serwera produkcyjnego. Spróbuj wprowadzić niewielką zmianę, na przykład nieco obszerniejszy opis przeznaczenia projektu wyświetlany na stronie głównej. Następnie postaraj się dodać trochę bardziej zaawansowaną funkcję, na przykład możliwość publicznego udostępnienia tematu przez jego właściciela. Taka zmiana będzie wymagała użycia atrybutu o nazwie public jako części modelu Topic (wartością domyślną wymienionego atrybutu powinno być False) oraz elementu formularza na stronie new_topic pozwalającego użytkownikowi na oznaczenie tematu jako prywatnego lub publicznego. Następnie trzeba będzie przeprowadzić migrację projektu i zmodyfikować kod w pliku views.py, aby tematy publiczne mogły być wyświetlane również przez nieuwierzytelnionych użytkowników. Pamiętaj o migracji bazy danych w serwerze produkcyjnym po przekazaniu uaktualnionego projektu do Heroku.