Python mniej poważnie

Tekst
0
Recenzje
Przeczytaj fragment
Oznacz jako przeczytane
Jak czytać książkę po zakupie
Czcionka:Mniejsze АаWiększe Aa


Dane oryginału

Copyright © 2019 by Lee Vaughan. Title of English-language original: Impractical Python Projects: Playful Programming Activities to Make You Smarter, ISBN 978-1-59327-890-8, published by No Starch Press. Polish-language edition copyright © 2020 by Polish Scientific Publishers PWN Wydawnictwo Naukowe PWN Spółka Akcyjna. All rights reserved.

Przekład Krzysztof Kapustka na zlecenie WITKOM Witold Sikorski

Projekt okładki polskiego wydania Joanna Andryjowicz na podstawie oryginału

Wydawca Edyta Kawala

Redaktor prowadzący Jolanta Kowalczuk

Redaktor Małgorzata Dąbkowska-Kowalik

Koordynator produkcji Anna Bączkowska

Skład wersji elektronicznej na zlecenie Wydawnictwa Naukowego PWN

Monika Lipiec / Woblink

Zastrzeżonych nazw firm i produktów użyto w książce wyłącznie w celu identyfikacji.

Copyright © for the Polish edition by Wydawnictwo Naukowe PWN SA

Warszawa 2020

ISBN 978-83-01-20998-8

eBook został przygotowany na podstawie wydania papierowego z 2020 r., (wyd. I)

Warszawa 2020

Wydawnictwo Naukowe PWN SA

02-460 Warszawa, ul. Gottlieba Daimlera 2

tel. 22 69 54 321, faks 22 69 54 288

infolinia 801 33 33 88

e-mail: pwn@pwn.com.pl; reklama@pwn.pl

www.pwn.pl

Dla przypadkowych programistów,

zdeterminowanych niespecjalistów i entuzjastów:

wszystkich amatorów, którzy piszą kod każdego dnia.

Niech ta książka Wam pomoże.

O autorze

Lee Vaughan jest geologiem z ponad 30-letnim doświadczeniem w przemyśle naftowym. Pracując jako starszy profesjonalista techniczny przy modelowaniu geologicznym w głównych międzynarodowych spółkach naftowych, Lee był zaangażowany w tworzenie i przegląd modeli komputerowych, rozwój, testowanie i komercjalizację oprogramowania, a także szkolenie geologów i inżynierów. Wspiera osoby nieprogramujące, które muszą korzystać z programowania w swojej pracy. Niepraktyczne projekty w Pythonie napisał, aby pomóc samoukom w doskonaleniu ich umiejętności z użyciem języka Python.

O recenzencie technicznym

Jeremy Kun uzyskał tytuł doktora na Uniwersytecie Illinois w Chicago. Prowadzi blog Math ∩ Programming (https://jeremykun.com/) i obecnie pracuje przy optymalizacji centrów danych w Google.

Spis treści

Podziękowania

Wprowadzenie

Dla kogo jest ta książka?

Co jest w tej książce?

Wersja Pythona, platforma i IDE

Kod

Styl kodu

Gdzie uzyskać pomoc?

Naprzód!

1. Generator zabawnych pseudonimów

Projekt 1: Generowanie pseudonimów

Planowanie i tworzenie projektu

Strategia

Pseudokod

Kod

Korzystanie z przewodnika po stylach tworzonego przez społeczność Pythona

Sprawdzanie kodu za pomocą narzędzia Pylint

Opisywanie kodu za pomocą ciągów docstring

Sprawdzanie stylu naszego kodu

Podsumowanie

Materiały dodatkowe

Pseudokod

Przewodniki po stylach

Moduły zewnętrzne

Ćwiczenia

Świńska łacina

Wykres słupkowy dla języka angielskiego

Wyzwania

Wykres słupkowy dla języków romańskich

Drugie imię

Coś całkowicie innego

2. Znajdowanie zaklęć

Znajdowanie i otwieranie słownika

Obsługiwanie wyjątków podczas otwierania plików

Wczytywanie pliku słownika

Projekt 2: Znajdowanie palindromów

Strategia i pseudokod

Palindromy

Projekt 3: Znajdowanie palindromów wielowyrazowych

Strategia i pseudokod

Palindromy wielowyrazowe – kod

Profilowanie palindromów

Optymalizacja palindromów

ceinoK

Materiały dodatkowe

Ćwiczenie: oczyszczanie słownika

Wyzwanie: podejście rekurencyjne

3. Rozwiązywanie anagramów

Projekt 4: Znajdowanie anagramów jednowyrazowych

Strategia i pseudokod

Znajdowanie anagramów – kod

Projekt 5: Znajdowanie anagramów wielowyrazowych

Strategia i pseudokod

Kod anagramów wielowyrazowych

Projekt 6: Znajdowanie Voldemorta – galijski gambit

Projekt 7: Znajdowanie Voldemorta: brytyjska metoda siłowa

Strategia

Kod brytyjskiej metody siłowej

Podsumowanie

Materiały dodatkowe

Ćwiczenie: znajdowanie dwuznaków

 

Wyzwanie: automatyczny generator anagramów

4. Dekodowanie szyfrów z amerykańskiej wojny domowej

Projekt 8: Szyfr trasowy

Strategia

Pseudokod

Dekodowanie szyfru trasowego – kod

Łamanie szyfru trasowego

Dodawanie interfejsu użytkownika

Projekt 9: Szyfr płotkowy

Strategia

Szyfrowanie szyfrem płotkowym – kod

Dekodowanie szyfru płotkowego – kod

Podsumowanie

Materiały dodatkowe

Ćwiczenia

Rozszyfrowywanie komunikatu Lincolna

Identyfikowanie rodzajów szyfrów

Przechowywanie klucza w formie słownika

Automatyzowanie możliwych kluczy

Przestawieniowy szyfr trasowy: atak siłowy

Wyzwania

Narzędzie do kodowania szyfrem trasowym

Szyfr płotkowy z trzema sztachetami

5. Kodowanie szyfrów z brytyjskiej wojny domowej

Projekt 10: Szyfr Trevaniona

Strategia i pseudokod

Szyfr Trevaniona – kod

Projekt 11: Pisanie ukrytej wiadomości

Szyfr listowy – kod

Szyfr listowy – wynik

Podsumowanie

Materiały dodatkowe

Ćwiczenia

Ratowanie Marii

Złapanie w zamku Colchester

6. Pisanie atramentem sympatycznym

Projekt 12: Ukrywanie szyfru Vigenère’a

Platforma

Strategia

Tworzenie atramentu sympatycznego

Operowanie dokumentami programu Word z użyciem modułu python-docx

Pobieranie zasobów

Pseudokod

Kod

Formatowanie i przeplatanie wiadomości

Dodawania szyfru Vigenère’a

Wykrywanie ukrytej wiadomości

Podsumowanie

Materiały dodatkowe

Ćwiczenie: sprawdzanie liczby pustych wierszy

Wyzwanie: korzystanie z czcionki o stałej szerokości znaków

7. Hodowanie olbrzymich szczurów za pomocą algorytmów genetycznych

Znajdowanie najlepszego rozwiązania

Projekt 13: Hodowanie armii superszczurów

Strategia

Superszczury – kod

Podsumowanie

Projekt 14: Łamanie kodu zaawansowanego technicznie sejfu

Strategia

Łamacz sejfów – kod

Podsumowanie

Materiały dodatkowe

Wyzwania

Tworzenie szczurzego haremu

Tworzenie bardziej wydajnego łamacza kodów sejfów

8. Zliczanie sylab w wierszach haiku

Japońskie haiku

Projekt 15: Zliczanie sylab

Strategia

Korzystanie z korpusu

Instalowanie NLTK

Pobieranie słownika CMUdict

Zliczanie dźwięków zamiast sylab

Obsługiwanie słów z więcej niż jedną wymową

Zarządzanie brakującymi słowami

Korpus szkoleniowy

Brakujące słowa – kod

Zliczanie sylab – kod

Przygotowanie, wczytywanie i zliczanie

Definiowanie funkcji main()

Program do sprawdzania naszego programu

Podsumowanie

Materiały dodatkowe

Ćwiczenie: zliczanie sylab a plik słownika

9. Pisanie Haiku z użyciem łańcuchów Markowa

Projekt 16: Analiza z użyciem łańcuchów Markowa

Strategia

Wybieranie i odrzucanie słów

Kontynuacja z jednego wersu do drugiego

Pseudokod

Korpus szkoleniowy

Debugowanie

Budowanie rusztowania

Rejestrowanie za pomocą modułu logging

Kod

Przygotowanie

Tworzenie modeli Markowa

Wybieranie losowego słowa

Stosowanie modeli Markowa

Generowanie wersów haiku

Pisanie interfejsu użytkownika

Wyniki

Dobre haiku

Inicjator haiku

Podsumowanie

Materiały dodatkowe

Wyzwania

Generator nowych słów

Test Turinga

Niewiarygodne! To niewiarygodne! Niewiarygodne!

Haikować czy nie haikować

Muzyka Markowa

10. Czy jesteśmy sami? Poznawanie paradoksu Fermiego

Projekt 17: Modelowanie Drogi Mlecznej

Strategia

Szacowanie liczby cywilizacji

Wybieranie rozmiaru bąbla fal radiowych

Generowanie wzoru dla prawdopodobieństwa wykrycia

Prawdopodobieństwo wykrycia – kod

Obliczanie prawdopodobieństwa wykrycia dla zakresu cywilizacji

 

Generowanie wzoru predykcyjnego i sprawdzanie rezultatów

Tworzenie modelu graficznego

Skalowanie modelu graficznego

Symulator galaktyki – kod

Rezultaty

Podsumowanie

Materiały dodatkowe

Ćwiczenia

Bardzo odległa galaktyka

Tworzenie galaktycznego imperium

Okrężny sposób przewidywania wykrywalności

Wyzwania

Tworzenie galaktyki spiralnej z poprzeczką

Dodawanie stref zamieszkiwalnych do naszej galaktyki

11. Problem Monty’ego Halla

Symulacja Monte Carlo

Projekt 18: Weryfikacja vos Savant

Strategia

Weryfikacja vos Savant – kod

Projekt 19: Gra Monty’ego Halla

Krótkie wprowadzenie do programowania obiektowego

Strategia i pseudokod

Zasoby gry

Gra Monty’ego Halla – kod

Podsumowanie

Materiały dodatkowe

Ćwiczenie: paradoks dnia urodzin

12. Zabezpieczanie kwoty na specjalny cel

Projekt 20: Symulowanie życia na emeryturze

Strategia

Historyczne zwroty mają znaczenie

Największa niepewność

Jakościowy sposób prezentowania wyników

Pseudokod

Wyszukiwanie danych historycznych

Kod

Importowanie modułów i definiowanie funkcji do wczytywania i pobierania danych od użytkownika

Pobieranie danych od użytkownika

Sprawdzanie pod kątem pozostałych błędów

Definiowanie silnika Monte Carlo

Symulowanie każdego roku w przypadku

Obliczanie prawdopodobieństwa ruiny

Definiowanie i wywoływanie funkcji main()

Korzystanie z symulatora

Podsumowanie

Materiały dodatkowe

Wyzwania

Obraz jest wart tysiąca dolarów

Mieszanka

Po prostu mam szczęście!

Cała pula

13. Symulowanie pozaziemskiego wulkanu

Projekt 21: Pióropusze Io

Pakiet pygame

Strategia

Planowanie za pomocą szkicu gry

Planowanie klasy Particle

Kod

Importowanie modułów, inicjalizacja pygame i definiowanie kolorów

Definiowanie klasy Particle

Wyrzucanie cząsteczki

Aktualizowanie cząsteczki i obsługa warunków brzegowych

Definiowanie funkcji main()

Kończenie funkcji main()

Uruchamianie symulacji

Podsumowanie

Materiały dodatkowe

Ćwiczenie: odległość

Wyzwania

Baldachim pióropusza

Źródło

Pocisk

14. Odwzorowywanie Marsa przy użyciu sondy Mars Orbiter

Astrodynamika dla graczy

Prawo powszechnego ciążenia

Prawo Keplera dotyczące ruchu planet

Mechanika orbitalna

Projekt 22: Gra Mars Orbiter

Strategia

Zasoby gry

Kod

Importowanie i tworzenie tabeli kolorów

Definiowanie metody inicjalizacyjnej klasy Satellite

Ustawianie początkowego położenia, prędkości, paliwa i dźwięku dla satelity

Odpalanie silników i oczekiwanie na reakcję gracza

Lokalizowanie satelity

Obracanie satelity i rysowanie jego orbity

Aktualizowanie obiektu satelity

Definiowanie metody inicjalizacyjnej klasy Planet

Obracanie planety

Definiowanie metod gravity() i update()

Obliczanie mimośrodu

Definiowanie funkcji do tworzenia etykiet

Odwzorowanie wilgotności gleby

Rzucanie cienia

Definiowanie funkcji main()

Tworzenie obiektów, przygotowywanie weryfikacji orbity, odwzorowywania i pomiarów czasu

Rozpoczynanie pętli gry i odtwarzanie dźwięków

Stosowanie grawitacji, obliczanie mimośrodu i obsługiwanie porażek

Nagradzanie sukcesu oraz aktualizowanie i rysowanie duszków

Wyświetlanie instrukcji i telemetrii oraz rzucanie cienia

Podsumowanie

Wyzwania

Ekran tytułowy gry

Inteligentne wskaźniki

Zanik łączności

Punkty

Przewodnik strategiczny

Hamowanie aerodynamiczne

Alarm o intruzie!

Z góry

15. Poprawianie astrofotografii za pomocą uśredniania planet

Projekt 23: Uśrednianie Jowisza

Moduł pillow

Praca z plikami i folderami

Ścieżki do katalogów

Moduł Shell Utilities

Wideo

Strategia

Kod

Kadrowanie i skalowanie

Uśrednianie

Poprawianie

Podsumowanie

Materiały dodatkowe

Wyzwanie: zniknięcie

16. Wykrywanie oszustw za pomocą Prawa Benforda

Projekt 24: Prawo Benforda dotyczące pierwszych cyfr

Stosowanie prawa Benforda

Wykonywanie testu chi kwadrat

Zbiór danych

Strategia

Kod

Importowanie modułów i wczytywanie danych

Zliczanie pierwszych cyfr

Pobieranie oczekiwanych liczników

Ustalanie zgodności rozkładów

Definiowane funkcji wykresu słupkowego

Kończenie funkcji wykresu słupkowego

Definiowanie i uruchamianie funkcji main()

Podsumowanie

Materiały dodatkowe

Ćwiczenie: pokonywanie Benforda

Wyzwania

Stosowanie prawa Benforda w wahających się stanach

Gdy nikt nie patrzył

Dodatek: Rozwiązania ćwiczeń

Rozdział 1: Generator zabawnych pseudonimów

Rozdział 2: Znajdowanie zaklęć

Rozdział 3: Rozwiązywanie anagramów

Rozdział 4: Dekodowanie szyfrów z amerykańskiej wojny domowej

Rozdział 5: Kodowanie szyfrów z brytyjskiej wojny domowej

Rozdział 6: Pisanie atramentem sympatycznym

Rozdział 8: Zliczanie sylab w wierszach haiku

Rozdział 10: Czy jesteśmy sami? Odkrywanie paradoksu Fermiego

Rozdział 11: Problem Monty’ego Halla

Rozdział 13: Symulowanie pozaziemskiego wulkanu

Rozdział 16: Znajdowanie oszustw za pomocą prawa Benforda

Przypisy

Podziękowania

Pisanie książki jest sprawą rodzinną, a ja nie mógłbym tego dokonać bez wsparcia ze strony zarówno mojej prawdziwej rodziny, jak i rodziny zastępczej w wydawnictwie No Starch Press. Przede wszystkim chciałbym podziękować mojej żonie, Hannah, a także moim córkom, Sarze i Lorze, za ich wyrozumiałość, cierpliwość i nieustanne wsparcie w redagowaniu.

Dziękuję pracownikom wydawnictwa No Starch, Billowi Polockowi i Tylerowi Ortmanowi, za przyjęcie mojej propozycji, Zachowi Lebowskiemu za nadanie sensu temu, co chciałem przekazać, Janelle Ludowise za wysoce profesjonalną pracę nad edycją produkcji, Rachel Monaghan i Pauli Fleming za ciężką pracę nad adjustacją i korektą książki technicznej, Davidowi Van Nessowi za skład oraz Serenie Yang i Joshowi Ellingsonowi za wspaniały projekt okładki. Dziękuję również moim technicznym recenzentom, Jeremy’emu Kunowi, Michaelowi Contraveosowi i Michele Pratusevich za znaczne ulepszenie tej książki dzięki bezcennym sugestiom i poprawkom.

Poza osobami z No Starch, dużego wsparcia technicznego udzielili mi Sarah Vaughan, Eric Evenchick, Xiao-Hui Wu, Brooks Clark, Brian Proett, Brent Francis i Glenn Krum.

Na koniec dziękuję Markowi Nathernowi za wprowadzenie mnie do języka Python, a także Guido van Rossumowi za stworzenie tego języka!

Wprowadzenie


Witamy w książce Python mniej poważnie. Korzystając z języka programowania Python, będziemy w niej odkrywać Marsa, Jowisza i najdalsze zakątki galaktyki, dusze poetów, świat wielkich finansów, podziemia szpiegostwa i fałszowania głosów, oszustwa w teleturniejach i znacznie więcej. Użyjemy łańcuchów Markowa do napisania haiku, symulacji Monte Carlo do modelowania rynków finansowych, uśredniania obrazów do usprawnienia naszej astrofotografii oraz algorytmów

genetycznych do wyhodowania armii gigantycznych szczurów, zdobywając jednocześnie doświadczenie w pracy z takimi modułami jak pygame, Pylint, pydocstyle, tkinter, python-docx, matplotlib i pillow. Przede wszystkim jednak będziemy się dobrze bawić.

Dla kogo jest ta książka?

Książkę tę można traktować jako drugi podręcznik do nauki Pythona. Została ona zaprojektowana w taki sposób, aby można ją było wykorzystywać jako uzupełnienie książki dla początkujących lub kursu wprowadzającego. Dzięki niej można będziesz w stanie kontynuować samodzielną naukę, stosując podejście oparte na projektach, bez marnowania pieniędzy lub miejsca na półce na dokładne przerabianie pojęć, które już znasz. Nie martw się jednak, że zostaniesz bez pomocy – cały kod jest odpowiednio opisany i objaśniony.

Projekty te przeznaczone są dla każdego, kto chce używać programowania do przeprowadzania eksperymentów, testowania teorii, symulowania natury lub po prostu do zabawy. Mowa tutaj również o osobach, które wykorzystują programowanie w swojej pracy (np. naukowcy lub inżynierowie), ale które nie są tak naprawdę programistami, a także osobach, które nazywam „zdeterminowanymi niespecjalistami” – dyletantami i amatorami, którzy czerpią przyjemność z rozwiązywania problemów programistycznych w wolnym czasie. Jeśli chciałeś pobawić się prezentowanymi tu koncepcjami, ale rozpoczynanie potencjalnie skomplikowanych projektów od zera uznałeś za zbyt trudne lub czasochłonne, to ta książka jest dla Ciebie.