Python. Instrukcje dla programisty. Wydanie II - ebook
Python. Instrukcje dla programisty. Wydanie II - ebook
Popularność Pythona stale rośnie: jest wszechstronny i zoptymalizowany pod kątem efektywności pracy, czytelności kodu i jakości oprogramowania, do tego darmowy, łatwo przenośny i można się go szybko nauczyć. Nadaje się do tworzenia gier i aplikacji sieciowych, do wdrażania indywidualnych rozwiązań biznesowych, sprawdza się nawet jako bezcenne narzędzie badaczy różnych dziedzin nauki. Jeśli tylko programista trochę się postara, może w Pythonie łatwo pisać przejrzysty, zwięzły kod, który jest prosty w utrzymaniu i nie sprawia problemów przy rozwijaniu oprogramowania. Python to idealny wybór dla każdego, kto nie chce tracić dużo czasu na naukę i liczy na to, że szybko zacznie pisać poprawny i działający kod.
"Doskonałe przedstawienie materiału wraz z dobrym wyjaśnieniem przykładowych fragmentów kodu. Ta książka rozwija się wraz z czytelnikiem - poruszasz się małymi krokami do przodu, zaczynasz tworzyć coraz bardziej skomplikowany kod, a po drodze wszystko jest dokładnie wyjaśnione."
FlickThrough Reviews
To drugie, zaktualizowane i poprawione wydanie bestsellerowego podręcznika Programowania w Pythonie pozwoli Ci błyskawicznie zacząć tworzyć kod, który działa! Zaczniesz od zrozumienia podstawowych koncepcji programistycznych, następnie nauczysz się zapewniać programom interaktywność i wykształcisz nawyk starannego testowania kodu przed wdrożeniem. Poszczególne zagadnienia będziesz natychmiast utrwalać dzięki licznym ćwiczeniom. Kolejnym etapem nauki będą praktyczne projekty: gra zręcznościowa, wizualizacja danych oraz aplikacja internetowa. Umiejętności, które zdobędziesz w ramach tego błyskawicznego kursu Pythona, pozwolą Ci tworzyć własne, rzeczywiste i wykorzystywane w praktyce aplikacje!
W tej książce znajdziesz dokładne instrukcje, jak:
- przygotować środowisko pracy i napisać swój pierwszy program
- wykorzystywać biblioteki i narzędzia Pythona, w tym pygame, matplotlib, plotly i Django
- generować interaktywne wizualizacje danych
- tworzyć proste aplikacje internetowe i wdrażać je na serwerach WWW
- testować i debugować kod oraz z powodzeniem rozwiązywać pojawiające się problemy
Zacznij programować w Pythonie! Szybko, już!
Spis treści
O autorze 23
O korektorze merytorycznym 23
Podziękowania 25
Wprowadzenie do drugiego wydania książki 27
Wprowadzenie 31
- Do kogo jest skierowana ta książka? 32
- Czego nauczysz się z tej książki? 32
- Zasoby w internecie 34
- Dlaczego Python? 34
CZĘŚĆ I. PODSTAWY
1. Rozpoczęcie pracy 39
- Przygotowanie środowiska programistycznego 39
- Wersje Pythona 39
- Wykonanie fragmentu kodu w Pythonie 40
- Edytor tekstu Sublime Text 41
- Python w różnych systemach operacyjnych 41
- Python w systemie Windows 41
- Python w systemie macOS 43
- Python w systemach z rodziny Linux 45
- Uruchomienie programu typu "Witaj, świecie!" 46
- Konfiguracja Sublime Text dla Pythona 3 46
- Uruchomienie programu typu "Witaj, świecie!" 47
- Rozwiązywanie problemów podczas instalacji 47
- Uruchamianie programów Pythona z poziomu powłoki 49
- W systemie Windows 49
- W systemach macOS i Linux 49
- Podsumowanie 51
2. Zmienne i proste typy danych 53
- Co tak naprawdę dzieje się po uruchomieniu hello_world.py? 53
- Zmienne 54
- Nadawanie nazw zmiennym i używanie zmiennych 55
- Unikanie błędów związanych z nazwami podczas używania zmiennych 56
- Zmienna to etykieta 57
- Ciągi tekstowe 58
- Zmiana wielkości liter ciągu tekstowego za pomocą metod 58
- Używanie zmiennych w ciągach tekstowych 60
- Dodawanie białych znaków do ciągów tekstowych za pomocą tabulatora i znaku nowego wiersza 61
- Usunięcie białych znaków 62
- Unikanie błędów składni w ciągach tekstowych 63
- Liczby 65
- Liczby całkowite 66
- Liczby zmiennoprzecinkowe 66
- Liczby całkowite i zmiennoprzecinkowe 67
- Znaki podkreślenia w liczbach 68
- Wiele przypisań 68
- Stałe 68
- Komentarze 69
- Jak można utworzyć komentarz? 69
- Jakiego rodzaju komentarze należy tworzyć? 70
- Zen Pythona 70
- Podsumowanie 72
3. Wprowadzenie do list 73
- Czym jest lista? 73
- Uzyskanie dostępu do elementów listy 74
- Numeracja indeksu zaczyna się od 0, a nie od 1 75
- Użycie poszczególnych wartości listy 75
- Zmienianie, dodawanie i usuwanie elementów 76
- Modyfikowanie elementów na liście 76
- Dodawanie elementów do listy 77
- Usuwanie elementu z listy 79
- Organizacja listy 84
- Trwałe sortowanie listy za pomocą metody sort() 84
- Tymczasowe sortowanie listy za pomocą funkcji sorted() 85
- Wyświetlanie listy w odwrotnej kolejności alfabetycznej 86
- Określenie wielkości listy 86
- Unikanie błędów indeksu podczas pracy z listą 88
- Podsumowanie 89
4. Praca z listą 91
- Iteracja przez całą listę 91
- Dokładniejsza analiza pętli 92
- Wykonanie większej liczby zadań w pętli for 93
- Wykonywanie operacji po pętli for 95
- Unikanie błędów związanych z wcięciami 96
- Brak wcięcia 96
- Brak wcięcia dodatkowych wierszy 97
- Niepotrzebne wcięcie 97
- Niepotrzebne wcięcie po pętli 98
- Brak dwukropka 99
- Tworzenie list liczbowych 100
- Użycie funkcji range() 100
- Użycie funkcji range() do utworzenia listy liczb 101
- Proste dane statystyczne dotyczące listy liczb 103
- Lista składana 103
- Praca z fragmentami listy 105
- Wycinek listy 105
- Iteracja przez wycinek 107
- Kopiowanie listy 107
- Krotka 110
- Definiowanie krotki 111
- Iteracja przez wszystkie wartości krotki 112
- Nadpisanie krotki 112
- Styl tworzonego kodu 113
- Konwencje stylu 114
- Wcięcia 114
- Długość wiersza 114
- Puste wiersze 115
- Inne specyfikacje stylu 115
- Podsumowanie 116
5. Konstrukcja if 117
- Prosty przykład 117
- Test warunkowy 118
- Sprawdzenie równości 118
- Ignorowanie wielkości liter podczas sprawdzania równości 119
- Sprawdzenie nierówności 120
- Porównania liczbowe 121
- Sprawdzanie wielu warunków 122
- Sprawdzanie, czy wartość znajduje się na liście 123
- Sprawdzanie, czy wartość nie znajduje się na liście 124
- Wyrażenie boolowskie 124
- Polecenie if 125
- Proste polecenia if 125
- Polecenia if-else 127
- Łańcuch if-elif-else 127
- Użycie wielu bloków elif 129
- Pominięcie bloku else 130
- Sprawdzanie wielu warunków 130
- Używanie poleceń if z listami 134
- Sprawdzanie pod kątem wartości specjalnych 134
- Sprawdzanie, czy lista nie jest pusta 135
- Użycie wielu list 136
- Nadawanie stylu poleceniom if 138
- Podsumowanie 139
6. Słowniki 141
- Prosty słownik 142
- Praca ze słownikami 142
- Uzyskiwanie dostępu do wartości słownika 143
- Dodanie nowej pary klucz-wartość 144
- Rozpoczęcie pracy od pustego słownika 145
- Modyfikowanie wartości słownika 145
- Usuwanie pary klucz-wartość 147
- Słownik podobnych obiektów 147
- Używanie metody get() w celu uzyskania dostępu do wartości 149
- Iteracja przez słownik 151
- Iteracja przez wszystkie pary klucz-wartość 151
- Iteracja przez wszystkie klucze słownika 153
- Iteracja przez uporządkowane klucze słownika 155
- Iteracja przez wszystkie wartości słownika 156
- Zagnieżdżanie 158
- Lista słowników 158
- Lista w słowniku 161
- Słownik w słowniku 164
- Podsumowanie 166
7. Dane wejściowe użytkownika i pętla while 167
- Jak działa funkcja input()? 168
- Przygotowanie jasnych i zrozumiałych komunikatów 169
- Użycie funkcji int() do akceptowania liczbowych danych wejściowych 170
- Operator modulo 171
- Wprowadzenie do pętli while 173
- Pętla while w działaniu 173
- Umożliwienie użytkownikowi podjęcia decyzji o zakończeniu działania programu 174
- Użycie flagi 175
- Użycie polecenia break do opuszczenia pętli 177
- Użycie polecenia continue w pętli 178
- Unikanie pętli działającej w nieskończoność 178
- Użycie pętli while wraz z listami i słownikami 180
- Przenoszenie elementów z jednej listy na drugą 180
- Usuwanie z listy wszystkich egzemplarzy określonej wartości 182
- Umieszczenie w słowniku danych wejściowych wprowadzonych przez użytkownika 182
- Podsumowanie 184
8. Funkcje 185
- Definiowanie funkcji 185
- Przekazywanie informacji do funkcji 186
- Argumenty i parametry 187
- Przekazywanie argumentów 188
- Argumenty pozycyjne 188
- Argumenty w postaci słów kluczowych 190
- Wartości domyślne 191
- Odpowiedniki wywołań funkcji 192
- Unikanie błędów związanych z argumentami 193
- Wartość zwrotna 194
- Zwrot prostej wartości 195
- Definiowanie argumentu jako opcjonalnego 196
- Zwrot słownika 197
- Używanie funkcji wraz z pętlą while 198
- Przekazywanie listy 201
- Modyfikowanie listy w funkcji 201
- Uniemożliwianie modyfikowania listy przez funkcję 204
- Przekazywanie dowolnej liczby argumentów 205
- Argumenty pozycyjne i przekazywanie dowolnej liczby argumentów 207
- Używanie dowolnej liczby argumentów w postaci słów kluczowych 208
- Przechowywanie funkcji w modułach 210
- Import całego modułu 210
- Import określonych funkcji 211
- Użycie słowa kluczowego as w celu zdefiniowania aliasu funkcji 212
- Użycie słowa kluczowego as w celu zdefiniowania aliasu modułu 212
- Import wszystkich funkcji modułu 213
- Nadawanie stylu funkcjom 214
- Podsumowanie 215
9. Klasy 217
- Utworzenie i użycie klasy 218
- Utworzenie klasy Dog 218
- Utworzenie egzemplarza na podstawie klasy 220
- Praca z klasami i egzemplarzami 223
- Klasa Car 223
- Przypisanie atrybutowi wartości domyślnej 224
- Modyfikacja wartości atrybutu 225
- Dziedziczenie 229
- Metoda __init__() w klasie potomnej 229
- Definiowanie atrybutów i metod dla klasy potomnej 231
- Nadpisywanie metod klasy nadrzędnej 232
- Egzemplarz jako atrybut 233
- Modelowanie rzeczywistych obiektów 236
- Import klas 236
- Import pojedynczej klasy 236
- Przechowywanie wielu klas w module 239
- Import wielu klas z modułu 240
- Import całego modułu 241
- Import wszystkich klas z modułu 242
- Import modułu w module 242
- Używanie aliasów 243
- Określenie swojego sposobu pracy 244
- Biblioteka standardowa Pythona 245
- Nadawanie stylu klasom 245
- Podsumowanie 247
10. Pliki i wyjątki 249
- Odczytywanie danych z pliku 250
- Wczytywanie całego pliku 250
- Ścieżka dostępu do pliku 252
- Odczytywanie wiersz po wierszu 253
- Utworzenie listy wierszy na podstawie zawartości pliku 255
- Praca z zawartością pliku 255
- Ogromne pliki, czyli na przykład milion cyfr 256
- Czy data Twoich urodzin znajduje się w liczbie pi? 257
- Zapisywanie danych w pliku 259
- Zapisywanie danych do pustego pliku 259
- Zapisywanie wielu wierszy 260
- Dołączanie do pliku 261
- Wyjątki 262
- Obsługiwanie wyjątku ZeroDivisionError 262
- Używanie bloku try-except 263
- Używanie wyjątków w celu uniknięcia awarii programu 263
- Blok else 264
- Obsługa wyjątku FileNotFoundError 266
- Analiza tekstu 267
- Praca z wieloma plikami 268
- Ciche niepowodzenie 270
- Które błędy należy zgłaszać? 271
- Przechowywanie danych 272
- Używanie json.dump() i json.load() 273
- Zapisywanie i odczytywanie danych wygenerowanych przez użytkownika 274
- Refaktoryzacja 276
- Podsumowanie 279
11. Testowanie kodu 281
- Testowanie funkcji 282
- Test jednostkowy i zestaw testów 283
- Zaliczenie testu 283
- Niezaliczenie testu 285
- Reakcja na niezaliczony test 287
- Dodanie nowego testu 288
- Testowanie klasy 290
- Różne rodzaje metod asercji 290
- Klasa do przetestowania 290
- Testowanie klasy AnonymousSurvey 293
- Metoda setUp() 295
- Podsumowanie 297
CZĘŚĆ II. PROJEKTY
PROJEKT 1. INWAZJA OBCYCH 301
12. Statek, który strzela pociskami 303
- Planowanie projektu 304
- Instalacja Pygame 304
- Rozpoczęcie pracy nad projektem gry 305
- Utworzenie okna Pygame i reagowanie na działania użytkownika 305
- Zdefiniowanie koloru tła 307
- Utworzenie klasy ustawień 308
- Dodanie obrazu statku kosmicznego 309
- Utworzenie klasy statku kosmicznego 310
- Wyświetlenie statku kosmicznego na ekranie 312
- Refaktoryzacja, czyli metody _check_events() i _update_screen() 314
- Metoda _check_events() 314
- Metoda _update_screen() 315
- Kierowanie statkiem kosmicznym 316
- Reakcja na naciśnięcie klawisza 316
- Umożliwienie nieustannego ruchu 316
- Poruszanie statkiem w obu kierunkach 318
- Dostosowanie szybkości statku 320
- Ograniczenie zasięgu poruszania się statku 322
- Refaktoryzacja metody _check_events() 323
- Naciśnięcie klawisza Q w celu zakończenia gry 323
- Uruchamianie gry w trybie pełnoekranowym 324
- Krótkie powtórzenie 325
- alien_invasion.py 325
- settings.py 325
- ship.py 325
- Wystrzeliwanie pocisków 326
- Dodawanie ustawień dotyczących pocisków 326
- Utworzenie klasy Bullet 327
- Przechowywanie pocisków w grupie 328
- Wystrzeliwanie pocisków 329
- Usuwanie niewidocznych pocisków 330
- Ograniczenie liczby pocisków 332
- Utworzenie metody _update_bullets() 333
- Podsumowanie 334
13. Obcy! 335
- Przegląd projektu 336
- Utworzenie pierwszego obcego 336
- Utworzenie klasy Alien 337
- Utworzenie egzemplarza obcego 338
- Utworzenie floty obcych 339
- Ustalenie maksymalnej liczby obcych wyświetlanych w jednym rzędzie 340
- Utworzenie rzędów obcych 341
- Refaktoryzacja metody _create_fleet() 342
- Dodawanie rzędów 343
- Poruszanie flotą obcych 345
- Przesunięcie obcych w prawo 346
- Zdefiniowanie ustawień dla kierunku poruszania się floty 347
- Sprawdzenie, czy obcy dotarł do krawędzi ekranu 348
- Przesunięcie floty w dół i zmiana kierunku 349
- Zestrzeliwanie obcych 350
- Wykrywanie kolizji z pociskiem 350
- Utworzenie większych pocisków w celach testowych 351
- Ponowne utworzenie floty 353
- Zwiększenie szybkości pocisku 353
- Refaktoryzacja metody _update_bullets() 354
- Zakończenie gry 355
- Wykrywanie kolizji między obcym i statkiem 355
- Reakcja na kolizję między obcym i statkiem 356
- Obcy, który dociera do dolnej krawędzi ekranu 359
- Koniec gry! 360
- Ustalenie, które komponenty gry powinny być uruchomione 361
- Podsumowanie 362
14. Punktacja 363
- Dodanie przycisku Gra 363
- Utworzenie klasy Button 364
- Wyświetlenie przycisku na ekranie 366
- Uruchomienie gry 367
- Zerowanie gry 368
- Dezaktywacja przycisku Gra 369
- Ukrycie kursora myszy 369
- Zmiana poziomu trudności 371
- Zmiana ustawień dotyczących szybkości 371
- Wyzerowanie szybkości 373
- Punktacja 373
- Wyświetlanie punktacji 374
- Utworzenie tablicy wyników 375
- Uaktualnienie punktacji po zestrzeleniu obcego 377
- Zerowanie wyniku 378
- Zagwarantowanie uwzględnienia wszystkich trafień 378
- Zwiększenie liczby zdobywanych punktów 379
- Zaokrąglanie punktacji 380
- Najlepsze wyniki 381
- Wyświetlenie aktualnego poziomu gry 384
- Wyświetlenie liczby statków 387
- Podsumowanie 390
PROJEKT 2. WIZUALIZACJA DANYCH 391
15. Generowanie danych 393
- Instalacja matplotlib 394
- Wygenerowanie prostego wykresu liniowego 395
- Zmienianie etykiety i grubości wykresu 395
- Poprawianie wykresu 397
- Używanie wbudowanych stylów 398
- Używanie funkcji scatter() do wyświetlania poszczególnych punktów i nadawania im stylu 400
- Wyświetlanie serii punktów za pomocą funkcji scatter() 401
- Automatyczne obliczanie danych 402
- Definiowanie własnych kolorów 403
- Użycie mapy kolorów 404
- Automatyczny zapis wykresu 404
- Błądzenie losowe 405
- Utworzenie klasy RandomWalk 406
- Wybór kierunku 407
- Wyświetlenie wykresu błądzenia losowego 408
- Wygenerowanie wielu błądzeń losowych 408
- Nadawanie stylu danym wygenerowanym przez błądzenie losowe 410
- Symulacja rzutu kością do gry za pomocą plotly 415
- Instalacja plotly 416
- Utworzenie klasy Die 416
- Rzut kością do gry 417
- Analiza wyników 417
- Utworzenie histogramu 418
- Rzut dwiema kośćmi 420
- Rzut kośćmi o różnej liczbie ścianek 422
- Podsumowanie 424
16. Pobieranie danych 425
- Format CSV 426
- Przetwarzanie nagłówków pliku CSV 426
- Wyświetlanie nagłówków i ich położenia 427
- Wyodrębnienie i odczytanie danych 428
- Wyświetlenie danych na wykresie temperatury 429
- Moduł datetime 430
- Wyświetlanie daty 431
- Wyświetlenie dłuższego przedziału czasu 432
- Wyświetlenie drugiej serii danych 433
- Nakładanie cienia na wykresie 435
- Sprawdzenie pod kątem błędów 436
- Samodzielne pobieranie danych 440
- Mapowanie globalnych zbiorów danych - format JSON 441
- Pobranie danych dotyczących trzęsień ziemi 442
- Analiza danych JSON 442
- Utworzenie listy trzęsień ziemi 445
- Wyodrębnienie siły trzęsienia ziemi 445
- Wyodrębnienie danych o miejscu wystąpienia trzęsienia ziemi 446
- Budowanie mapy świata 447
- Inny sposób określenia danych wykresu 448
- Dostosowanie wielkości punktu 449
- Dostosowanie koloru punktu 450
- Inne skale kolorów 452
- Dodanie tekstu wyświetlanego po wskazniu punktu na mapie 452
- Podsumowanie 454
17. Praca z API 455
- Użycie Web API 455
- Git i GitHub 456
- Żądanie danych za pomocą wywołania API 456
- Instalacja requests 457
- Przetworzenie odpowiedzi API 458
- Praca ze słownikiem odpowiedzi 459
- Podsumowanie repozytoriów najczęściej oznaczanych gwiazdką 461
- Monitorowanie ograniczeń liczby wywołań API 463
- Wizualizacja repozytoriów za pomocą pakietu plotly 463
- Dopracowanie wykresów generowanych przez plotly 465
- Dodanie własnych podpowiedzi 467
- Dodawanie łączy do wykresu 469
- Więcej o plotly i API GitHub 470
- Hacker News API 470
- Podsumowanie 475
PROJEKT 3. APLIKACJE INTERNETOWE 477
18. Rozpoczęcie pracy z Django 479
- Przygotowanie projektu 480
- Opracowanie specyfikacji 480
- Utworzenie środowiska wirtualnego 480
- Aktywacja środowiska wirtualnego 481
- Instalacja frameworka Django 481
- Utworzenie projektu w Django 482
- Utworzenie bazy danych 483
- Przegląd projektu 484
- Uruchomienie aplikacji 485
- Definiowanie modeli 486
- Aktywacja modeli 487
- Witryna administracyjna Django 489
- Zdefiniowanie modelu Entry 492
- Migracja modelu Entry 493
- Rejestracja modelu Entry w witrynie administracyjnej 494
- Powłoka Django 495
- Tworzenie stron internetowych - strona główna aplikacji 496
- Mapowanie adresu URL 498
- Utworzenie widoku 500
- Utworzenie szablonu 500
- Utworzenie dodatkowych stron 502
- Dziedziczenie szablonu 502
- Strona tematów 505
- Strony poszczególnych tematów 508
- Podsumowanie 512
19. Konta użytkowników 513
- Umożliwienie użytkownikom wprowadzania danych 514
- Dodawanie nowego tematu 514
- Dodawanie nowych wpisów 518
- Edycja wpisu 523
- Konfiguracja kont użytkowników 527
- Aplikacja users 527
- Strona logowania 528
- Wylogowanie 531
- Strona rejestracji użytkownika 532
- Umożliwienie użytkownikom bycia właścicielami swoich danych 536
- Ograniczenie dostępu za pomocą dekoratora @login_required 536
- Powiązanie danych z określonymi użytkownikami 538
- Przyznanie dostępu jedynie odpowiednim użytkownikom 541
- Ochrona tematów użytkownika 542
- Ochrona strony edit_entry 543
- Powiązanie nowego tematu z bieżącym użytkownikiem 544
- Podsumowanie 545
20. Nadanie stylu i wdrożenie aplikacji 547
- Nadanie stylu aplikacji Learning Log 548
- Aplikacja django-bootstrap4 548
- Użycie Bootstrapa do nadania stylu aplikacji Learning Log 549
- Modyfikacja pliku base.html 549
- Użycie elementu Jumbotron do nadania stylu stronie głównej 554
- Nadanie stylu stronie logowania 556
- Nadanie stylu stronie tematów 557
- Nadanie stylów wpisom na stronie tematu 558
- Wdrożenie aplikacji Learning Log 560
- Utworzenie konta w Heroku 560
- Instalacja Heroku CLI 560
- Instalacja wymaganych pakietów 560
- Utworzenie listy pakietów w pliku requirements.txt 561
- Określenie środowiska uruchomieniowego Pythona 562
- Modyfikacja pliku settings.py dla Heroku 562
- Utworzenie pliku Procfie do uruchomienia procesu 563
- Użycie Gita do monitorowania plików projektu 563
- Przekazanie projektu do Heroku 566
- Konfiguracja bazy danych w Heroku 567
- Dopracowanie wdrożenia projektu w Heroku 568
- Zabezpieczenie wdrożonego projektu 570
- Zatwierdzenie zmian i przekazanie ich do serwera 571
- Zdefiniowanie zmiennej środowiskowej w Heroku 572
- Utworzenie własnych stron błędu 573
- Nieustanna rozbudowa 576
- Opcja SECRET_KEY 577
- Usunięcie projektu z Heroku 577
- Podsumowanie 578
Posłowie 581
A. Instalacja Pythona i rozwiązywanie problemów 583
- Python w Windows 583
- Odszukanie interpretera Pythona 584
- Dodanie Pythona do zmiennej Path 584
- Ponowna instalacja Pythona 585
- Python w systemie macOS 585
- Instalacja Homebrew 586
- Instalacja Pythona 586
- Python w systemie Linux 587
- Słowa kluczowe Pythona i wbudowane funkcje 587
- Słowa kluczowe Pythona 588
- Wbudowane funkcje Pythona 588
B. Edytory tekstu i środowiska IDE 589
- Dostosowanie ustawień edytora Sublime Text 590
- Konwersja tabulatorów na spacje 590
- Ustawianie wskaźnika długości linii 590
- Wcięcia i brak wcięć bloków kodu 591
- Umieszczenie bloku kodu w komentarzu 591
- Zapisywanie konfiguracji edytora Sublime Text 591
- Dalsze konfigurowanie edytora Sublime Text 592
- Inne edytory tekstu i środowiska IDE 592
- IDLE 592
- Geany 592
- Emacs i vim 592
- Atom 593
- Visual Studio Code 593
- PyCharm 593
C. Uzyskiwanie pomocy 595
- Pierwsze kroki 595
- Spróbuj jeszcze raz 596
- Chwila odpoczynku 596
- Korzystaj z zasobów tej książki 597
- Wyszukiwanie informacji w internecie 597
- Stack Overflow 597
- Oficjalna dokumentacja Pythona 598
- Oficjalna dokumentacja biblioteki 598 ...
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-6361-8 |
Rozmiar pliku: | 7,4 MB |