Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00267 005619 18999267 na godz. na dobę w sumie
Python. Zacznij programować! - książka
Python. Zacznij programować! - książka
Autor: Liczba stron: 644
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-4654-3 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> python - programowanie
Porównaj ceny (książka, ebook (-35%), audiobook).

Python jest znakomitym językiem do tworzenia wydajnego kodu. Nadaje się do różnych, również bardzo nietypowych zastosowań. Samo programowanie natomiast, choć jest w nim coś magicznego, stanowi umiejętność, którą każdy może opanować pod warunkiem odrobiny zaangażowania. Naturalnie, nauka kodowania nie zawsze przebiega bezproblemowo. Trzeba zrozumieć sposób działania komputera i nauczyć się nieco inaczej myśleć o rozwiązywaniu problemów. Napisanie dobrze działającego programu jest jednak niezwykle satysfakcjonującym doświadczeniem, a programowanie samo w sobie jest jedną z najbardziej kreatywnych umiejętności.

Ta książka jest przeznaczona dla osób, które nie mają doświadczenia w programowaniu. Została pomyślana jako podręcznik, który maksymalnie ułatwia uczenie się skutecznego kodowania. Najpierw omówiono niskopoziomowe instrukcje programowania, aby stopniowo przejść do przedstawienia i analizy profesjonalnych konstrukcji programistycznych. Książka jest przyjazna w odbiorze, a przy tym jest pełna innowacji, takich jak choćby opis korzystania z wbudowanych gadżetów czy projekty 'zrób to sam'. Dzięki temu Czytelnik bardzo szybko odkryje, że programowanie jest świetną, ekscytującą i porywającą zabawą!

W tej książce:

Wszechstronny, wydajny, elastyczny. Python - wybór idealny!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Begin to Code with Python Tłumaczenie: Radosław Meryk ISBN: 978-83-283-4654-3 Authorized translation from the English language edition, entitled: BEGIN TO CODE WITH PYTHON, First Edition, ISBN 9781509304523; by Rob Miles; published by Pearson Education, Inc., publishing as Microsoft Press. Copyright © 2018 by Pearson Education, Inc., publishing as Microsoft Press. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. Polish language edition published by HELION S.A. Copyright © 2018. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz HELION SA dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. HELION SA ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/pytzap.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/pytzap Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis treści Wprowadzenie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xviii Część I Podstawy programowania 1. 2. Zaczynamy używać Pythona . . . . . . . . . . . . . . . . . . . . . . . . . 2 Czym jest Python? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Korzenie Pythona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Wersje Pythona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Zbuduj miejsce do pracy z Pythonem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Zdobądź narzędzia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Python na komputerze z systemem Windows . . . . . . . . . . . . . . . . . . . . . . 7 Uruchamianie Pythona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Python i programowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Co to znaczy być programistą? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Programowanie a planowanie przyjęcia . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Programowanie a problemy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Programiści a inne osoby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Komputery jako procesory danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Maszyny i komputery a ludzie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Python_ksiega.indb 7 vii 2018-09-16 20:14:18 Poleć książkęKup książkę 3. Programy jako procesory danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Python jako procesor danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Dane i informacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Praca z funkcjami Pythona. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Funkcja ord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Funkcja chr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Analiza sposobu przechowywania danych za pomocą funkcji bin . . .39 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Struktura programów w Pythonie . . . . . . . . . . . . . . . . . . . 44 Twój pierwszy program w Pythonie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Uruchamianie programów w Pythonie w środowisku IDLE . . . . . . . . . 46 Pobieranie danych wyjściowych programu za pomocą funkcji print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Korzystanie z bibliotek Pythona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Biblioteka random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Biblioteka time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Komentarze w Pythonie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Przykłady kodu i komentarze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Uruchamianie Pythona z pulpitu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Opóźnij koniec programu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Korzystanie z biblioteki snaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Dodawanie biblioteki pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Funkcje z biblioteki snaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 viii Python_ksiega.indb 8 2018-09-16 20:14:18 Poleć książkęKup książkę 4. 5. Zmienne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Zmienne w Pythonie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Nazwy w Pythonie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Praca z tekstem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Oznaczanie początku i końca ciągów znaków . . . . . . . . . . . . . . . . . . . . . 81 Znaki „ucieczki” w tekście . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Wczytywanie tekstu za pomocą funkcji input . . . . . . . . . . . . . . . . . . . . . 84 Praca z liczbami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Konwersja ciągów znaków na liczby całkowite . . . . . . . . . . . . . . . . . . . . . 87 Liczby całkowite i rzeczywiste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Liczby rzeczywiste i zmiennoprzecinkowe . . . . . . . . . . . . . . . . . . . . . . . . . 90 Konwersja ciągów znaków na wartości zmiennoprzecinkowe . . . . . . . 95 Wykonywanie obliczeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Konwersja pomiędzy typami float i int . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Wstawki pogodowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Podejmowanie decyzji w programach . . . . . . . . . . . . . . 104 Dane typu Boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Tworzenie zmiennych typu Boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Wyrażenia logiczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Porównywanie wartości . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Operacje logiczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Konstrukcja if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Zagnieżdżanie warunków if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Logika programu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Podejmuj decyzje, aby stworzyć aplikację . . . . . . . . . . . . . . . . . . . . . . . . 129 Projekt interfejsu użytkownika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Implementacja interfejsu użytkownika . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Python_ksiega.indb 9 ix 2018-09-16 20:14:18 Poleć książkęKup książkę 6. 7. Testowanie danych wprowadzanych przez użytkownika . . . . . . . . . . . 132 Dokończenie programu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Funkcje wprowadzania danych z biblioteki snaps . . . . . . . . . . . . . . . . . . 134 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Powtarzanie działań z wykorzystaniem pętli . . . . . . . . . 140 Konstrukcja while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Powtarzanie sekwencji instrukcji za pomocą instrukcji while . . . . . . . 142 Obsługa nieprawidłowych danych wprowadzanych przez użytkownika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Wykrywanie wprowadzania nieprawidłowych liczb przy użyciu wyjątków . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 Wyjątki a czytanie liczb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Obsługa wielu wyjątków . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Przerywanie pętli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Powrót na początek pętli za pomocą instrukcji continue . . . . . . . . . . 158 Licznik powtórzeń w pętli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Konstrukcja pętli for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Zegar cyfrowy z wykorzystaniem biblioteki snaps . . . . . . . . . . . . . . . . . 167 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Korzystanie z funkcji w celu uproszczenia programów . . . . . . . . . . . . . . . . . . . . . 170 Co tworzy funkcję? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Przekazywanie informacji do funkcji za pomocą parametrów . . . . . . 176 Zwracanie wartości z wywołań funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Tworzenie funkcji wielokrotnego użytku . . . . . . . . . . . . . . . . . . . . . . . . . 193 Funkcja do wprowadzania tekstu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Dodawanie pomocy do funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Funkcja do wprowadzania liczb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 x Python_ksiega.indb 10 2018-09-16 20:14:18 Poleć książkęKup książkę 8. Przekształcenie funkcji w moduł Pythona . . . . . . . . . . . . . . . . . . . . . . . . 201 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Przechowywanie kolekcji danych . . . . . . . . . . . . . . . . . . . 210 Listy i śledzenie sprzedaży . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Ograniczenia pojedynczych zmiennych . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Listy w Pythonie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Wczytywanie elementów listy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Wyświetlanie listy za pomocą pętli for . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Refaktoryzacja programów w celu użycia funkcji . . . . . . . . . . . . . . . . . . 221 Tworzenie funkcji-wypełniaczy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 Utwórz menu użytkownika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Sortowanie bąbelkowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Inicjalizacja listy danymi testowymi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Sortowanie listy od wartości największej do najmniejszej . . . . . . . . . 228 Sortowanie listy od wartości najmniejszej do największej . . . . . . . . . 234 Znajdowanie największej i najmniejszej wartości sprzedaży . . . . . . . 235 Obliczanie całkowitej i średniej wartości sprzedaży . . . . . . . . . . . . . . 236 Dokończenie programu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Przechowywanie danych w plikach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Zapis do pliku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Zapis danych dotyczących sprzedaży . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Czytanie z pliku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 Odczyt danych dotyczących sprzedaży . . . . . . . . . . . . . . . . . . . . . . . . . 246 Obsługa błędów dotyczących plików . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Przechowywanie tabel danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Użycie pętli do przetwarzania tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Wykorzystanie list w roli tabel podglądu . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Krotki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Python_ksiega.indb 11 xi 2018-09-16 20:14:18 Poleć książkęKup książkę Część II Zaawansowane programowanie 9. Wykorzystanie klas do przechowywania danych . . . . . 264 Prosta aplikacja do zarządzania kontaktami . . . . . . . . . . . . . . . . . . . . . . . 266 Stwórz prototyp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Przechowuj dane kontaktowe na oddzielnych listach . . . . . . . . . . . . 269 Wykorzystanie klasy do przechowywania danych kontaktowych . . . . . . . . . . . . . . . . . . . . . . 272 Wykorzystanie klasy Contact w programie Proste kontakty . . . . . . 275 Edycja kontaktów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Zapisywanie kontaktów w pliku z wykorzystaniem biblioteki pickle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 Ładowanie kontaktów z pliku z wykorzystaniem biblioteki pickle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 Dodanie do aplikacji Proste kontakty operacji zapisu i ładowania danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Konfiguracja egzemplarzy klas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 Słowniki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 Zarządzanie słownikami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 Zwracanie słownika z funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 Wykorzystanie słownika do przechowywania kontaktów . . . . . . . . . 303 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 10. Wykorzystanie klas do tworzenia aktywnych obiektów . . . . . . . . . . . . . . . . . . 308 Utworzenie aplikacji Monitor czasu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Dodanie atrybutów danych do klasy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Tworzenie spójnego obiektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 Utworzenie atrybutów metod dla klasy . . . . . . . . . . . . . . . . . . . . . . . . . . 314 xii Python_ksiega.indb 12 2018-09-16 20:14:18 Poleć książkęKup książkę 11. Dodanie sprawdzania poprawności do metod . . . . . . . . . . . . . . . . . . . . 316 Chroń atrybut danych przed uszkodzeniem . . . . . . . . . . . . . . . . . . . . . 328 Metody chronione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 Tworzenie właściwości klasy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 Ewolucja projektu klasy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 Zarządzanie wersjami klas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 Metoda __str__ klasy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 Formatowanie ciągów znaków w Pythonie . . . . . . . . . . . . . . . . . . . . . . 348 Śledzenie sesji w aplikacji Monitor czasu . . . . . . . . . . . . . . . . . . . . . . . . . . 350 Funkcja Pythona map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 Metoda join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 Tworzenie muzyki z wykorzystaniem biblioteki snaps . . . . . . . . . . . . . . 363 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 Projektowanie rozwiązań bazujących na obiektach . . . . . . . . . . . . . . . . . . . . . . . . . . 372 Aplikacja Modny ciuch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 Projektowanie danych aplikacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 Projekt obiektowy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 Tworzenie klas nadrzędnych i potomnych . . . . . . . . . . . . . . . . . . . . . . . 379 Projekt danych — podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 Implementacja zachowań aplikacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 Obiekty jako komponenty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 Tworzenie komponentu FashionShop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 Utworzenie komponentu interfejsu użytkownika . . . . . . . . . . . . . . . . . 417 Projektowanie z wykorzystaniem klas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Zbiory w Pythonie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 Zbiory i znaczniki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426 Zbiory a hierarchie klas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 Python_ksiega.indb 13 xiii 2018-09-16 20:14:18 Poleć książkęKup książkę 12. Aplikacje w Pythonie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438 Funkcje zaawansowane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 Referencje do funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 Używanie wyrażeń lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 Funkcje iteratora i instrukcja yield . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 Funkcje z dowolną liczbą argumentów . . . . . . . . . . . . . . . . . . . . . . . . . . 457 Moduły i pakiety . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460 Moduły w Pythonie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460 Dodanie funkcji readme do modułu BTCInput . . . . . . . . . . . . . . . . . . . . 461 Uruchamianie modułu jako programu . . . . . . . . . . . . . . . . . . . . . . . . . . 462 Wykrywanie, czy moduł uruchomiono jako program . . . . . . . . . . . . 463 Tworzenie pakietów w Pythonie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 Importowanie modułów z pakietów . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 Testowanie programu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470 Instrukcja assert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 Moduł Pythona unittest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 Tworzenie testów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 Przeglądanie dokumentacji programu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 xiv Python_ksiega.indb 14 2018-09-16 20:14:18 Poleć książkęKup książkę Część III Przydatny Python 13. Python i graficzne interfejsy użytkownika . . . . . . . . . . . 488 Visual Studio Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 Instalacja środowiska Visual Studio Code . . . . . . . . . . . . . . . . . . . . . . . . 490 Instalacja rozszerzeń dla języka Python w Visual Studio Code . . . . . . 491 Tworzenie folderu projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 Tworzenie pliku programu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 Debugowanie programu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494 Inne edytory dla aplikacji w Pythonie . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 Tworzenie graficznego interfejsu użytkownika za pomocą biblioteki Tkinter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 Tworzenie aplikacji z interfejsem GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . 506 Projekt układu siatki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 Utworzenie funkcji obsługi zdarzeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 Utworzenie pętli głównej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 Obsługa błędów w aplikacjach z graficznym interfejsem użytkownika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512 Wyświetlanie okien informacyjnych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 Rysowanie na „płótnie” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 Zdarzenia modułu Tkinter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 Tworzenie programu do rysowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 Wprowadzanie tekstu złożonego z wielu wierszy . . . . . . . . . . . . . . . . 526 Grupowanie elementów ekranowych w ramkach . . . . . . . . . . . . . . . . 528 Utworzenie edytowalnego dokumentu StockItem z wykorzystaniem graficznego interfejsu użytkownika . . . . . . . . . . . 529 Python_ksiega.indb 15 xv 2018-09-16 20:14:18 Poleć książkęKup książkę 14. 15. 16. Tworzenie selektora z wykorzystaniem obiektu Listbox . . . . . . . . . . . 537 Aplikacja z graficznym interfejsem użytkownika . . . . . . . . . . . . . . . . . 544 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546 Programy w języku Python jako klienty sieci . . . . . . . . 548 Sieci komputerowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550 Wykorzystywanie sieci WWW z poziomu Pythona . . . . . . . . . . . . . . . . . 562 Czytanie strony internetowej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 Korzystanie z danych ze stron WWW . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 Programy w Pythonie jako serwery sieciowe . . . . . . . . . 570 Tworzenie serwera WWW w Pythonie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572 Prosty serwer bazujący na gniazdach . . . . . . . . . . . . . . . . . . . . . . . . . . . 572 Serwer WWW w Pythonie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577 Serwowanie stron internetowych z plików . . . . . . . . . . . . . . . . . . . . . . . 579 Pobieranie informacji od użytkowników witryny WWW . . . . . . . . . . 584 Hostowanie aplikacji Pythona w internecie . . . . . . . . . . . . . . . . . . . . . . . . 590 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590 Tworzenie gier za pomocą biblioteki pygame . . . . . . . 592 Wprowadzenie do biblioteki pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594 Rysowanie ilustracji za pomocą pygame . . . . . . . . . . . . . . . . . . . . . . . . . . 601 Typy plików graficznych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601 Ładowanie ilustracji do gry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602 Ruchome obrazy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604 xvi Python_ksiega.indb 16 2018-09-16 20:14:18 Poleć książkęKup książkę Pobieranie danych od użytkownika za pomocą pygame . . . . . . . . . . . 606 Tworzenie postaci w grze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609 Dodanie postaci gracza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614 Sterowanie postacią gracza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617 Postać krakersa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617 Dodanie wielu egzemplarzy klasy Sprite . . . . . . . . . . . . . . . . . . . . . . . . . 619 Łapanie krakersów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620 Implementacja zabójczego pomidora . . . . . . . . . . . . . . . . . . . . . . . . . . . 625 Dokończenie gry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629 Dodanie ekranu startowego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629 Zakończenie gry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634 Punktacja gry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636 Skorowidz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638 Python_ksiega.indb 17 xvii 2018-09-16 20:14:19 Poleć książkęKup książkę Python_ksiega.indb 15 2018-09-16 20:14:23 Poleć książkęKup książkę 2. Python i programowanie Python_ksiega.indb 16 2018-09-16 20:14:24 Poleć książkęKup książkę Czego się nauczysz? W tym rozdziale zaczniesz pracować z Pythonem. Jednak zanim to zrobisz, pobawimy się trochę w detektywa i spróbujemy ustalić, co sprawia, że ktoś jest programistą, i co naprawdę robi program komputerowy. Przyjrzymy się także językowi programowania Python i odkryjemy, w jaki sposób pasuje do tematyki tworzenia oprogramowania. Co to znaczy być programistą?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 Komputery jako procesory danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22 Dane i informacje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 Praca z funkcjami Pythona. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36 Czego się nauczyłeś? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41 Python_ksiega.indb 17 17 2018-09-16 20:14:24 Poleć książkęKup książkę Co to znaczy być programistą? Jeśli dotychczas jeszcze nie programowałeś, nie martw się. Programowanie to nie fizyka jądrowa. Najtrudniejszą częścią nauki programowania są początki — gdy musisz zapoznać się z mnóstwem pojęć, które mogą być mylące. Jeśli jednak uważasz, że nauka programowania wydaje się wyzwaniem, któremu nie będziesz w stanie sprostać, to zdecydowanie sugeruję, abyś odłożył te myśli na bok. Programowanie jest tak samo proste jak zorganizowanie przyję- cia urodzinowego dla grupy dzieci. Programowanie a planowanie przyjęcia Gdybyście organizowali przyjęcie urodzinowe dla dzieci, musielibyście zdecydować, kogo zaprosić. Trzeba by zapamiętać, kto lubi pizzę wegetariańską oraz które dzieci nie mogą sie- dzieć obok siebie, bo się pokłócą. Musielibyście ustalić, jakie prezenty zabierze do domu każde dziecko oraz co będzie robić na przyjęciu. Musielibyście tak zorganizować czas, aby magik nie przybył akurat wtedy, kiedy będzie podawane jedzenie. Dla ułatwienia organizacji przyjęcia można by skorzystać z list podobnych do tych, które pokazano na rysunku 2.1. Programowanie to dokładnie to samo — wszystko sprowadza się do organizacji. Rysunek 2.1. Planowanie przyjęcia jest bardzo podobne do programowania. Trzeba zadbać o dobrą organizację Jeśli potrafisz zorganizować przyjęcie, to potrafisz również napisać program. To, co się dzieje w programie, jest trochę inne, ale podstawowe zasady są takie same. Ponieważ program zawiera elementy, które tworzysz i którymi zarządzasz (w przeciwieństwie do niesfornych dzieci), masz pełną kontrolę nad tym, co się dzieje. Co więcej, kiedy już nabierzesz trochę doświadczenia w programowaniu, będziesz potrafił podejść do zadań wykonywanych w życiu w sposób bardziej usystematyzowany. Zatem odrobina doświadczenia w programowaniu może sprawić, że staniesz się lepszym organizatorem. 18 Rozdział 2. Python i programowanie Python_ksiega.indb 18 2018-09-16 20:14:24 Poleć książkęKup książkę Większość ludzi definiuje programowanie jako „zarabianie dużych sum pieniędzy na robieniu czegoś, czego nikt nie potrafi zrozumieć”. Ja definiuję programowanie jako „ustalenie roz- wiązania określonego problemu i wyrażenie go w formie, którą potrafi zrozumieć i wykonać system komputerowy”. Z powyższej definicji wynikają jedna lub dwie rzeczy: ● Zanim napiszesz program, który wykona określone działanie, musisz potrafić rozwiązać problem samodzielnie. ● Komputer musi rozumieć to, co próbujesz mu powiedzieć. Program można porównać do przepisu kulinarnego. Jeśli nie wiesz, jak upiec ciasto, nie będziesz w stanie powiedzieć komuś, jak ma to zrobić. A jeśli osoba, z którą rozmawiasz, nie rozumie instrukcji typu „przygotuj mąkę i cukier do zmieszania”, to nadal nie będziesz w stanie wytłumaczyć jej, jak upiec ciasto. Aby utworzyć program, musisz skorzystać z wypracowanego rozwiązania, a następnie zapisać je w prostych krokach, które komputer jest w stanie wykonać. Programowanie a problemy Czasami porównuję programistów do hydraulików. Hydraulik przychodzi do pracy z dużą torbą narzędzi i części zamiennych. Przygląda się problemowi przez dłuższą chwilę, otwiera torbę, wyjmuje różne narzędzia i części, dopasowuje je do siebie i rozwiązuje problem. Programo- wanie jest bardzo podobne. Masz problem do rozwiązania i dysponujesz dużą torbą narzę- dzi — w tym przypadku językiem programowania. Przyglądasz się problemowi przez chwilę i zastanawiasz się, jak go rozwiązać, a następnie dopasowujesz elementy języka, aby wyeli- minować problem. Sztuka programowania polega na ustaleniu tych elementów, które trzeba wyjąć z torby narzędzi po to, by rozwiązać każdą część problemu. Interesujący składnik programowania stanowi sztuka podzielenia problemu na zbiór instrukcji, które można przekazać komputerowi. Jednak umiejętność programowania nie sprowadza się tylko do nauczenia się języka. Programowanie nie jest również wyłącznie kwestią wymyślenia programu, który rozwiązuje dany problem. Podczas pisania programu trzeba wziąć pod uwagę wiele czynników i nie wszystkie one są bezpośrednio związane z konkretnym problemem. Na początek załóżmy, że piszesz swoje programy dla klienta. Klient ma problem i chciałby, żebyś napisał program, który go rozwiąże. Zakładamy także, że klient wie jeszcze mniej o kompute- rach niż my! Początkowo nie będziemy nawet wspominać o języku programowania, typie komputera lub podobnych rzeczach. Najpierw powinniśmy się upewnić, że wiemy, czego chce klient. Ponie- waż programiści chwalą się, że potrafią wymyślać rozwiązania, gdy tylko dostaną problem, natychmiast zaczynają myśleć o sposobach rozwiązania — to niemal odruchowe działanie. Niestety, wiele projektów oprogramowania nie powiodło się ze względu na to, że próbowano rozwiązywać niewłaściwy problem. Znalezienie idealnego rozwiązania problemu, który nie Python_ksiega.indb 19 2018-09-16 20:14:24 Co to znaczy być programistą? 19 Poleć książkęKup książkę jest problemem klienta, to zjawisko występujące zaskakująco często w rzeczywistym świecie. Twórcy oprogramowania po prostu nie ustalili tego, co było potrzebne lub pożądane. Zamiast tego zbudowali to, co uważali za potrzebne. Klienci założyli, że skoro programiści przestali zadawać pytania, to zaczęli tworzyć właściwe rozwiązanie. Dopiero przy ostatecznym przeka- zaniu programu odkryli niewygodną prawdę. Jest bardzo ważne, aby programista nie zaczynał pracy, zanim nie będzie dokładnie wiedział, co jest potrzebne. Najgorszą rzeczą, jaką możesz od razu powiedzieć klientowi, jest zdanie „potrafię to zrobić”. Zamiast tego powinieneś najpierw zapytać: „Czy właśnie tego chce klient?”, „Czy naprawdę rozumiem, na czym polega problem?”. Zadawanie tych pytań jest czymś w rodzaju samody- scypliny. Zanim rozwiążesz problem, powinieneś się upewnić, że posiadasz dokładną definicję tego, na czym problem polega. Ta definicja powinna być zrozumiała i akceptowalna zarówno dla Ciebie, jak i klienta. W realnym świecie taką definicję czasem nazywa się specyfikacją funkcjonalną projektu (ang. functional design specification — FDS). Specyfikacja FDS mówi dokładnie, czego chce klient. Podpisujesz ją zarówno Ty, jak i klient. Jeśli dostarczysz system, który zachowuje się zgodnie ze specyfikacją projektu, klient musi za niego zapłacić. Gdy już masz specyfikację projektu, możesz zacząć rozważać sposoby rozwiązania problemu. Mógłbyś pomyśleć, że posiadanie specyfikacji nie będzie konieczne, jeśli piszesz program dla siebie, ale to nie jest prawda. Napisanie specyfikacji w jakiejś formie zmusza do myślenia o problemie na bardzo szczegółowym poziomie. Zmusza także do myślenia o tym, czego Twój system nie będzie robić. Potrzebujesz takiej przejrzystości w równym stopniu, kiedy budujesz program dla siebie, jak i wtedy, kiedy pracujesz z klientem. Specyfikacja na samym początku określa oczekiwania. KĄCIK PROGRAMISTY Zawsze powinna istnieć jakaś forma specyfikacji Napisałem wiele programów za pieniądze. Nigdy nie napisałbym programu bez otrzymania wcześ- niej solidnej specyfikacji. Zdefiniowanie specyfikacji jest niezbędne nawet wtedy (a może zwłaszcza wtedy), gdy wykonuję pracę dla przyjaciela. W nowoczesnych technikach wytwarzania oprogramowania klient znajduje się w centrum uwagi i na bieżąco angażuje się w proces projektowania. Takie podejście jest bardzo wygodne, ponieważ na początku prac nad projektem bardzo trudno jest uzyskać specyfikację w osta- tecznej postaci. Programista nie wie zbyt wiele na temat działalności klienta, a klient nie zna ograniczeń i możliwości technologii, których można użyć do rozwiązania problemu. Dobrym pomysłem jest wykonanie serii wersji rozwiązania i omówienie każdej wersji z klientem przed przystąpieniem do opracowywania następnej. Technikę tę nazywamy prototypowaniem. 20 Rozdział 2. Python i programowanie Python_ksiega.indb 20 2018-09-16 20:14:25 Poleć książkęKup książkę Takie podejście do rozwiązywania problemów sprawdza się niezależnie od wykorzystywanych języków programowania. Kwestie zapewnienia odpowiednich specyfikacji i unikania zało- żeń są tak samo ważne, gdy próbujesz cokolwiek zorganizować — w tym również przyjęcie urodzinowe. Programiści a inne osoby Ustalenie, czego chce klient, to jeden z najważniejszych aspektów każdego zadania programi- stycznego. Jednak komunikacja z innymi ludźmi jest ważna także w wielu innych sytuacjach. Być może chcesz przekonać bogatego inwestora, że masz pomysł na następne wielkie opro- gramowanie. Być może chcesz przekonać potencjalnego klienta, że dysponujesz najlepszym rozwiązaniem jego problemów. Nie wszyscy programiści od początku są świetni w komunikacji. Jednak trzeba zapamiętać, że umiejętności komunikacyjnych można się nauczyć, tak samo jak nowego języka programowa- nia. Stawanie się lepszym w komunikacji może oznaczać wyjście poza strefę komfortu — nikt nie lubi stać przed publicznością po raz pierwszy. Ale wystarczy trochę wprawy, aby opanować umiejętności komunikacyjne i znacznie zwiększyć swoje szanse na odegranie znaczącej roli w tym biznesie. Skuteczna komunikacja dotyczy także dokumentów pisemnych. Umiejętność tworzenia tekstu, który inni mogą przeczytać, jest bardzo przydatna, a — tak jak wcześniej wspominałem — najlepszym sposobem na doskonalenie tych umiejętności jest praktyka. Radzę zacząć pisać blog lub dziennik. To nic, że początkowo Twój blog czyta tylko Twoja mama. Ważne, że piszesz regularnie. Jeśli piszesz o czymś, czym się interesujesz (ja — niespodzianka — piszę o progra- mowaniu pod adresem www.robmiles.com), szybko osiągniesz postępy. KĄCIK PROGRAMISTY Programiści, którzy potrafią się dobrze komunikować z otoczeniem, zara- biają najwięcej pieniędzy i otrzymują najciekawszą pracę Można nieźle zarabiać na programowaniu nawet wtedy, gdy potrafisz komunikować się tylko poje- dynczymi słowami i mruczeniem — pod warunkiem, że potrafisz szybko napisać kod, który spełnia podane wymagania. Ale najciekawsze zadania trafiają do programistów, którzy potrafią się dobrze komunikować. To oni potrafią sprzedawać swoje pomysły i najlepiej rozmawiać z klientami, dzięki czemu mogą się dowiedzieć, czego chce klient. Python_ksiega.indb 21 2018-09-16 20:14:25 Co to znaczy być programistą? 21 Poleć książkęKup książkę Komputery jako procesory danych Teraz, gdy wiemy, co robią programiści, możemy zacząć się zastanawiać, czym są komputery i co sprawia, że są tak wyjątkowe. Maszyny i komputery a ludzie Ludzie są rasą producentów narzędzi. Wymyślamy rzeczy, które ułatwiają nam życie, i robimy to od tysięcy lat. Zaczęliśmy od urządzeń mechanicznych, takich jak pług, dzięki któremu rolnictwo stało się bardziej wydajne, w poprzednim stuleciu przełączyliśmy się na urządzenia elektroniczne, a ostatnio na komputery. W miarę jak komputery stały się mniejsze i tańsze, znalazły drogę do otaczających nas rzeczy. Wiele urządzeń (np. telefon komórkowy) może działać tylko dlatego, że da się zamontować w nich komputer, który jest ich centralną częścią. Musimy jednak pamiętać, co robią komputery — automatyzują operacje, które wcześniej wymagały pracy mózgu. W komputerach nie ma nic szczególnie inteligentnego. Komputer po prostu postępuje zgodnie z instrukcjami, które zostały mu przekazane. Komputer przetwarza dane w podobny sposób, w jaki maszyna do produkcji kiełbasek przetwarza mięso: coś wkłada się na jednym końcu, wykonywane jest pewne przetwarzanie i coś wychodzi z drugiej strony. Program można porównać do instrukcji, jakie trener przeka- zuje drużynie futbolu amerykańskiego lub piłki nożnej przed rozpoczęciem meczu. Trener może powiedzieć coś w stylu: „Jeśli będą atakować z lewej strony, to Jerzy i Krzysztof pilnują skrzydła, ale jeśli piłka będzie zagrana na środek pola, to Jerzy idzie za piłką”. Następnie, pod- czas gry, zespół będzie reagował na wydarzenia w sposób, który powinien pozwolić pokonać przeciwników. Istnieje jedna ważna różnica pomiędzy programem komputerowym a sposobem, w jaki zespół może się zachowywać podczas meczu piłki nożnej. Piłkarz rozpozna sytuację, gdy otrzyma jakieś bezsensowne instrukcje. Na przykład gdy trener powie: „Jeśli będą atakować z lewej strony, to Jerzy śpiewa pierwszą zwrotkę hymnu narodowego, a następnie biegnie jak najszyb- ciej w kierunku wyjścia”, to gracz zaprotestuje. Niestety, program nie jest świadomy wrażliwości danych, które przetwarza, tak samo jak maszyna do kiełbasek nie jest świadoma tego, jakie przerabia mięso. Jeśli wrzucimy do niej rower, to maszyna spróbuje zrobić z niego kiełbaski. Jeśli przekażemy do komputera bezsen- sowne dane, to przetworzy je na bezsensowne wyniki. W przypadku komputerów dane są po prostu wzorcem sygnałów, które muszą zostać przetworzone w jakiś sposób, aby utworzyć inny wzorzec sygnałów. Program komputerowy to sekwencja instrukcji informujących kompu- ter, co należy zrobić z danymi wejściowymi i jaką postać powinny przyjąć dane wyjściowe. 22 Rozdział 2. Python i programowanie Python_ksiega.indb 22 2018-09-16 20:14:25 Poleć książkęKup książkę Oto przykłady typowych aplikacji przetwarzania danych (rysunek 2.2): ● Telefon komórkowy — mikrokomputer w Twoim telefonie odbiera sygnały radiowe i przekształca je na dźwięk. Jednocześnie pobiera sygnały z mikrofonu i przekształca je na wzorce bitów, które zostaną przesłane przez radio. ● Samochód — mikrokomputer w silniku pobiera informacje z czujników informujących o aktualnych obrotach silnika, prędkości jazdy, zawartości tlenu w powietrzu, ustawieniach akceleratora itd. Wytwarza też sygnały napięciowe, które kontrolują ustawienia wtrysku paliwa, czasy dla świec zapłonowych i inne elementy optymalizujące wydajność silnika. ● Konsola do gier — komputer pobiera instrukcje z kontrolerów i wykorzystuje je do zarzą- dzania sztucznym światem, który tworzy dla gracza. Rysunek 2.2. Komputery w urządzeniach Większość współczesnych umiarkowanie złożonych urządzeń zawiera komponenty do prze- twarzania danych, które są wykorzystywane w celu optymalizacji ich wydajności. Niektóre z tych komponentów istnieją tylko dlatego, że możemy je wbudować w urządzenia. Rozwój internetu rzeczy wprowadza komputery do ogromnego zakresu obszarów. Ważne jest, aby myśleć o przetwarzaniu danych jako o czymś więcej niż narzędziu do obliczeń płac — obli- czania i drukowania wyników (tradycyjne zastosowania komputerów). Inżynierowie oprogra- mowania z pewnością poświęcą mnóstwo czasu na montowanie do urządzeń komponentów przetwarzania danych, aby nimi sterować. Dzięki tym wbudowanym systemom wiele osób będzie korzystało z komputerów, nawet o tym nie wiedząc! Python_ksiega.indb 23 2018-09-16 20:14:25 Komputery jako procesory danych 23 Poleć książkęKup książkę KĄCIK PROGRAMISTY Oprogramowanie może być kwestią życia i śmierci Pamiętaj, że pozornie nieszkodliwe programy mogą zagrażać życiu. Na przykład lekarz może używać arkusza kalkulacyjnego, który napisałeś, do ustalania dawki leków dla pacjentów. W takim przypadku defekt programu może spowodować fizyczne uszkodzenia (nie sądzę, żeby lekarze posługiwali się oprogramowaniem z błędami — ale nigdy nie wiadomo). Przerażający opis tego, co może pójść źle, gdy programiści nie zwracają uwagi na podstawy, można znaleźć w internecie. W tym celu poszukaj frazy Therac-25. Programy jako procesory danych Zadania realizowane przez każdy komputer pokazano na rysunku 2.3. Do komputera trafiają dane, komputer coś z nimi robi, a następnie zwraca przetworzone dane. Format, jaki przyjmują dane, oraz to, co oznaczają dane wyjściowe, a także co robi program, zależy wyłącznie od nas. Rysunek 2.3. Komputer jako procesor danych Jak wspomniano wcześniej, program można porównać do przepisu kulinarnego. Zilustrowano to na rysunku 2.4. W tym przykładzie rolę komputera odgrywa kucharz, a przepis to program, który kontroluje to, co kucharz robi ze składnikami. W przepisie może występować wiele różnych składników, a program może pracować z wieloma różnymi danymi wejściowymi. Na przykład może pobie- rać Twój wiek i tytuł filmu, który chcesz zobaczyć, i na tej podstawie zwracać wynik określający, czy możesz obejrzeć ten film. 24 Rozdział 2. Python i programowanie Python_ksiega.indb 24 2018-09-16 20:14:25 Poleć książkęKup książkę Rysunek 2.4. Przepisy a programy Python jako procesor danych Język programowania Python również można traktować jako procesor danych (rysunek 2.5). Kod napisany w Pythonie trafia do silnika Pythona, który następnie generuje jakieś wyniki. Rysunek 2.5. Python jako procesor danych Czasami, jak już widzieliśmy, wyjście reprezentuje komunikat o błędzie (np. gdy wpiszemy hello). Innym razem mogą to być filozoficzne zdania opisujące naturę języka Python (jak wtedy, gdy wpisaliśmy import this). Spróbujmy użyć powłoki poleceń Pythona, aby dowie- dzieć się więcej o tym, jak ten język działa. Komputery jako procesory danych 25 Python_ksiega.indb 25 2018-09-16 20:14:25 Poleć książkęKup książkę ZRÓB TO SAM Porozmawiaj z Pythonem Kiedy ostatnio rozmawialiśmy z Pythonem, niewiele powiedzieliśmy. Teraz przeprowadzimy bar- dziej szczegółową rozmowę i zobaczymy, czego możemy się dowiedzieć o tym, jak działa ten język. Najpierw musimy użyć polecenia IDLE, aby uruchomić powłokę Pythona — tak jak to zrobiliśmy w poprzednim rozdziale: W rozdziale 1. próbowaliśmy przywitać się z Pythonem, ale to nie skończyło się pomyślnie. Spróbujmy zatem wprowadzić do powłoki poleceń coś, o czym wiemy, że komputery rozumieją — np. liczbę. Wpisz wartość 2 i naciśnij Enter: Tym razem nie wyświetli się komunikat o błędzie; wyświetli się wartość 2. Wygląda na to, że powłoka Pythona potrafi znaleźć odpowiedź i nam ją przesłać. Możemy to udowodnić, wprowadzając sumę — np. 2+2: 26 Rozdział 2. Python i programowanie Python_ksiega.indb 26 2018-09-16 20:14:26 Poleć książkęKup książkę Tym razem, zamiast wyświetlić echo 2+2, powłoka Pythona obliczyła wynik sumy i nam go zwróciła. Wygląda na to, że powłoka Pythona odbiera od nas instrukcje i na tej podstawie wykonuje jakieś działania. W rzeczywistości tak właśnie się dzieje. Wewnętrznie Python jest narzędziem do obliczania wartości wyrażeń, co jest wyszukanym sposobem na stwierdzenie, że Python coś dla nas robi. Jeśli wprowadzisz wyrażenie w powłoce Pythona, powłoka wyświetli jego wartość jako odpowiedź. Proste wyrażenie zaprezentowano na rysunku 2.6. Rysunek 2.6. Anatomia prostego wyrażenia Elementy, na których działa wyrażenie, nazywane są operandami. Elementy, które wykonują rzeczywistą pracę, nazywają się operatorami. Wyrażenie 2+2 zawiera dwa operandy (dwie liczby 2) i jeden operator (plus). Kiedy wprowadzisz wyrażenie do powłoki Pythona, zidentyfi- kuje ona operatory i operandy, a następnie obliczy działanie i da odpowiedź. Python_ksiega.indb 27 2018-09-16 20:14:26 Komputery jako procesory danych 27 Poleć książkęKup książkę CO MOGŁO PÓJŚĆ NIE TAK? Błędne wyrażenia Wcześniej zobaczyliśmy, co może się stać, jeśli wpiszemy w powłoce coś, czego Python nie rozumie. Wyświetli się komunikat o błędzie. To samo się stanie, jeśli przekażesz Pythonowi nieprawidłowe wyrażenie. Programista wprowadził wyrażenie 2+. To wyrażenie nie jest poprawne, więc powłoka Pythona wyświetliła czerwony pasek i czerwony komunikat o błędzie. Python bardzo dobrze się sprawdza w obliczaniu wartości wyrażeń. Jeśli chcesz, możesz uży- wać Pythona zamiast kalkulatora. Wyrażenia są obliczane w taki sam sposób, w jaki wykonałby je matematyk. Python uwzględnia kolejność działań — np. wykonuje mnożenie przed dodawa- niem i przestrzega nawiasów. Aby zbadać wyrażenia, możemy skorzystać z powłoki Pythona w celu przeprowadzenia kilku eksperymentów. Od tej chwili, zamiast pokazywania zrzutów ekranu powłoki Pythona, będę zamieszczał same wyniki, które wyświetlają się w środowisku IDLE. Zatem trzy poprzednie polecenia Pythona, które wydaliśmy, wyglądałyby tak: 2 2 2+2 4 2+ SyntaxError: invalid syntax Wprowadzany tekst jest wyświetlany na czarno, dane wyjściowe z Pythona są wyświetlane na niebiesko, a monity poleceń wyświetlają się w kolorze brązowym. Błędy wyświetlają się na czerwono. 28 Rozdział 2. Python i programowanie Python_ksiega.indb 28 2018-09-16 20:14:26 Poleć książkęKup książkę ANALIZA KODU Wyrażenia w Pythonie Od czasu do czasu w książce pojawiają się sekcje „ANALIZA KODU”, zawierające pytania na temat kodu, który właśnie zaprezentowaliśmy. Zanim przeczytasz odpowiedź, możesz spróbować odpowiedzieć na te pytania samodzielnie. Pytanie: Jak sądzisz, co by się stało, gdybyś spróbował obliczyć wartość wyrażenia 2+3*4? Odpowiedź: Operator * (gwiazdka) oznacza mnożenie. Python używa gwiazdki zamiast znaku × (symbolu mnożenia) stosowanego w matematyce. W matematyce zawsze wykonujemy operacje o wyższym priorytecie, takie jak mnożenie i dzielenie, przed dodawaniem, więc spodziewam się, że powyższe wyrażenie wyświetli wartość 14. Wyraz 3*4 zostanie obliczony najpierw, co daje wynik 12, a do niego zostanie dodana wartość 2. Jeśli spróbujesz tego w środowisku IDLE, powinieneś zobaczyć to, czego oczekiwałeś: 2+3*4 14 Pytanie: Jak sądzisz, co by się stało, gdybyś spróbował obliczyć wartość wyrażenia (2+3)*4? Odpowiedź: Nawiasy obejmują obliczenia, które należy wykonać najpierw, więc w powyższym wyrażeniu spodziewam się, że obliczona zostanie wartość 5 (2 + 3), a następnie ta wartość zosta- nie pomnożona przez 4, co da wynik 20. (2+3)*4 20 Pytanie: Jak sądzisz, co by się stało, gdybyś spróbował obliczyć wartość wyrażenia (2+3*4? Odpowiedź: To dość ciekawy przypadek. Powinieneś go wypróbować w powłoce Pythona. W odpowiedzi na wprowadzenie tego wyrażenia Python powie: „Wyrażenie, które próbuję obli- czyć, jest niekompletne. Potrzebuję nawiasu zamykającego”. Tak więc powłoka Pythona czeka na więcej informacji od Ciebie. Jeśli wpiszesz nawias zamykający, który uzupełni wyrażenie, powłoka Pythona obliczy wartość i wyświetli wynik. Możesz nawet wprowadzić w drugim wierszu następne komponenty wyrażenia. (2+3*4 ) 14 Python_ksiega.indb 29 2018-09-16 20:14:26 Komputery jako procesory danych 29 Poleć książkęKup książkę Pytanie: Jak sądzisz, co by się stało, gdybyś spróbował obliczyć wartość wyrażenia )2+3*4? Odpowiedź: Jeśli powłoka Pythona zauważy nawias zamykający przed otwierającym, natychmiast zorientuje się, że coś jest nie tak, i wyświetli komunikat o błędzie. )2+3*4 SyntaxError: invalid syntax Zwróćmy uwagę, że powłoka poleceń próbuje pomóc Ci ustalić, gdzie znajduje się błąd, podświet- lając niepoprawny znak. Python jako język skryptowy Możemy używać powłoki Pythona do prowadzenia konwersacji takich jak pokazana powy- żej, ponieważ Python jest „skryptowym” językiem programowania. Powłokę Pythona można porównać do rodzaju robota wykonującego polecenia Pythona, które do niej wprowadzimy. Innymi słowy: mówimy powłoce poleceń, co chcemy, żeby zrobił program za pomocą języka Python. Jeśli instrukcje nie mają sensu dla „robota”, powłoka mówi nam, że nie potrafi ich zro- zumieć (zwykle wyświetla je na czerwono). Proces czytania programu, a następnie działania zgodnie z zawartymi w nim instrukcjami nazy- wamy interpretacją programu. Aktorzy zarabiają na życie, interpretując tekst sztuki; komputery rozwiązują dla nas problemy, interpretując instrukcje programów. KĄCIK PROGRAMISTY Nie wszystkie języki programowania działają tak jak Python Nie wszystkie języki programowania są językami skryptowymi, które interpretują programy w taki sam sposób jak Python. Czasami instrukcje programu są konwertowane na instrukcje bardzo niskiego poziomu, które rozumie wyłącznie Twój komputer. Ten proces nazywa się kompilacją, a pro- gram wykonujący tę konwersję nazywa się kompilatorem. Skompilowane instrukcje można następnie załadować do komputera w celu ich uruchomienia. W wyniku zastosowania tej techniki powstają programy, które działają bardzo szybko, ponieważ w czasie wykonywania skompilowanych instrukcji niskiego poziomu komputer nie musi ustalać, co oznaczają instrukcje. Musi je tylko wykonywać. Można by pomyśleć, że w związku z tym Python jest „powolnym” językiem programowania, ponie- waż za każdym razem gdy działa program w Pythonie, „aktor-robot” zanim wykona jakieś polecenie, musi ustalić jego znaczenie. To jednak nie stanowi problemu, ponieważ współczesne komputery pracują bardzo szybko, a Python używa pewnych sprytnych sztuczek w celu kompilacji programu podczas jego uruchamiania. 30 Rozdział 2. Python i programowanie Python_ksiega.indb 30 2018-09-16 20:14:26 Poleć książkęKup książkę Dane i informacje Teraz, gdy wiemy, że komputery są maszynami przetwarzającymi dane, i rozumiemy, że pro- gramy mówią komputerom, co zrobić z danymi, zagłębimy się nieco w naturę danych i infor- macji. Ludzie używają słów „dane” i „informacje” zamiennie. Ważne jest jednak rozróżnienie pomiędzy nimi, ponieważ sposób, w jaki komputery i ludzie interpretują dane, jest zupełnie inny. Spójrzmy na rysunek 2.7, na którym pokazano różnicę. Rysunek 2.7. Dane i informacje Dwie części rysunku 2.7 zawierają te same dane, z tym że obraz po lewej stronie bardziej przy- pomina to, w jaki sposób są przechowywane dokumenty w komputerze. Do reprezentowania każdej litery i spacji w tekście komputer używa wartości liczbowej. Jeśli przeanalizujemy te liczby, możemy odczytać znaczenie każdej z nich — zaczynając od liczby 87, która reprezentuje wielką literę W (początek słowa When, od którego zaczyna się pierwszy akapit w dokumencie po prawej). Ze względu na sposób przechowywania danych przez komputery w mapowaniu liczb na litery bierze udział jeszcze jedna warstwa. Każda liczba jest pamiętana przez komputer jako unika- towy wzorzec sygnałów włączenia i wyłączenia (jedynek i zer). W informatyce każda 1 lub 0 to tzw. bit (doskonały opis działania komputerów na tym poziomie oraz wyjaśnienie, jak działa- nie to tworzy podstawę dla kodowania, można znaleźć w książce Charlesa Petzolda Code: The Hidden Language of Computer Hardware and Software). Wartość 87, o której wiemy, że oznacza wielką literę W, ma następującą postać: 1010111 Python_ksiega.indb 31 2018-09-16 20:14:27 Dane i informacje 31 Poleć książkęKup książkę Jest to binarna reprezentacja wartości. Dokładny opis konwersji wartości binarnej na liczbę dziesiętną wykracza poza ramy tej książki (poza tym zrobił to Charles Petzold!), ale powyższy wzorzec można rozwikłać następująco: „87 to 1 plus 2 plus 4 plus 16 plus 64”. Każdy z bitów wzorca informuje sprzęt komputerowy o tym, czy w wartości występuje okre- ślona potęga liczby 2. Nie przejmuj się zbytnio, jeśli nie do końca to rozumiesz. Zapamiętaj jednak, że dane dla komputerów są zbiorem przechowywanych i przetwarzanych jedynek i zer. Tym właśnie są dane. Z kolei informacje to interpretacja danych przez ludzi, w wyniku czego nabierają one znaczenia. Ściśle rzecz biorąc, komputery przetwarzają dane, a ludzie wykorzystują informacje. Na przykład komputer może przechowywać w pamięci następujący wzorzec bitowy: 11111111 11111111 11111111 00000000 Można to zinterpretować jako: „Masz 256 zł debetu w banku” lub „Jesteś 256 m pod powierzchnią ziemi”, lub „Osiem z trzydziestu dwóch wyłączników światła jest wyłączonych”. Konwersja danych na informacje zwykle odbywa się w chwili, gdy człowiek czyta wyjście programu. Podkreślam to po to, aby czytelnik zapamiętał, że komputer nie „wie”, co znaczą dane, które przetwarza. Dla komputerów dane są tylko wzorcami bitów, to użytkownik nadaje im sens. Pamiętaj o tym, gdy otrzymasz wyciąg z konta, który mówi, że masz 8 388 608 PLN na swoim koncie, kiedy naprawdę masz tylko 83 PLN. Przetwarzanie danych w Pythonie Teraz wiemy, że Python jest procesorem danych. Skrypt napisany w Pythonie jest interpreto- wany przez system Pythona, który następnie generuje pewne dane wyjściowe. Wiemy również, że wewnątrz komputera, na którym działa program w Pythonie, wartości danych są reprezen- towane przez wzorce bitów (jedynki i zera). ZRÓB TO SAM Praca z tekstem w Pythonie Spróbujmy powiedzieć „cześć” Pythonowi w taki sposób, żeby to zrozumiał. Wróć do powłoki Pythona w środowisku IDLE i wpisz słowo witaj . Tym razem jednak ujmij to słowo w apostrofy: witaj witaj 32 Rozdział 2. Python i programowanie Python_ksiega.indb 32 2018-09-16 20:14:27 Poleć książkęKup książkę Teraz nie wyświetli się żaden komunikat o błędzie. Python powtórzy tekst, który wprowadziłeś. Jeśli porównasz to z zachowaniem, które obserwowaliśmy po wprowadzeniu liczby, zauważysz, że w rze- czywistości Python zrobił to samo. Poprzednio wprowadziliśmy wartość 2, a Python powtórzył 2. Gdy wprowadziliśmy wartość tekstową, Python powtórzył ten tekst. Następną rzeczą, którą próbowaliśmy zrobić z liczbami, było ich dodawanie. Spróbujmy to zrobić dla ciągów tekstowych: witaj + świecie witaj świecie Fajnie. Python zachowuje się dokładnie tak, jak tego oczekujemy. Wiemy, że gdy przekażemy Pytho- nowi sumę do obliczenia, to obliczy jej wynik, a następnie go nam zwróci. Skorzystaliśmy z tego, aby dodać 2 do 2. Teraz odkryliśmy, że możemy użyć tej samej procedury, aby dodać słowo „witaj” do słowa „ świecie”. Zwróćmy jednak uwagę, że sprytnie umieściliśmy spację przed słowem „świecie”. W przeciwnym razie program wyświetliłby „witajświecie”. Wewnątrz Pythona także dzieje się coś sprytnego, ponieważ sposób działania operacji + (dodawanie) jest poprawny zarówno dla liczb, jak i ciągów znaków. Jeśli poprosimy Pythona o dodanie dwóch liczb, zwróci nam sumę. Jeśli poprosimy go o dodanie dwóch ciągów znaków, zwróci jeden ciąg dołączony na końcu drugiego. ANALIZA KODU Łamanie reguł Pythona Pytanie: Jak sądzisz, co by się stało, gdybyś pominął końcowy apostrof w napisanym ciągu znaków? Odpowiedź: Z naszych eksperymentów z nawiasami można by się spodziewać, że Python będzie cierpliwie czekał na następny wiersz, gdzie będziesz mógł wpisać resztę ciągu znaków. Niestety, tak się nie stanie. witaj SyntaxError: EOL while scanning string literal Literał tekstowy (ang. string literal) to ciąg tekstu, który „literalnie” znajduje się w tekście. Litery EOL są skrótem od End Of Line, co oznacza „koniec wiersza”. Powłoka Pythona mówi, że nie podoba jej się, jeśli ciągi znaków nie mają zakończenia. Python traktuje poszczególne operandy (liczby i ciągi znaków) jako konstrukcje, które nie mogą obejmować wielu wierszy. Nie ma nic złego w tworzeniu wyrażenia tekstowego, które obejmuje kilka wierszy (możesz tego spróbować), ale Python nie pozwala, aby operandy tego wyrażenia obejmowały wiele wierszy. Python_ksiega.indb 33 2018-09-16 20:14:27 Dane i informacje 33 Poleć książkęKup książkę Pytanie: Jak sądzisz, co by się stało, gdybyś spróbował odjąć jeden ciąg od drugiego? Odpowiedź: Python jest wystarczająco sprytny, żeby wiedzieć, że chociaż rozsądnie jest używać operacji – (odejmowanie), która oznacza „odejmowanie jednej liczby całkowitej od innej” (możesz tego spróbować, jeśli chcesz), to nie jest rozsądne, aby program próbował odejmować jeden ciąg znaków od innego. witaj - świecie Traceback (most recent call last): File pyshell#11 , line 1, in module witaj - świecie TypeError: unsupported operand type(s) for -: str and str Python podaje nam szczegóły tego, co poszło nie tak, ale zamiast powiedzieć: „Odejmowanie od siebie ciągów znaków jest głupie”, wyświetla opis, który jest znacznie trudniejszy do zrozumienia. Aby to zrozumieć, musisz wiedzieć, że słowo „operand” oznacza „coś, co jest przetwarzane przez operator”. W tym przypadku operatorem jest – (minus), a operandy są dwoma łańcuchami (witaj i świecie). Python mówi nam, że nie można umieścić operatora minus pomiędzy dwoma ciągami znaków. Pytanie: Jak sądzisz, co by się stało, gdybyś spróbował dodać liczbę do ciągu znaków? Odpowiedź: Dodanie liczby do ciągu znaków jest tak samo głupie jak odjęcie jednego ciągu znaków od innego, więc możesz oczekiwać, że Python wyświetli komunikat o błędzie. Ale możesz również oczekiwać, że ten komunikat będzie trudny do zrozumienia: witaj + 2 Traceback (most recent call last): File pyshell#14 , line 1, in module witaj + 2 TypeError: must be str, not int Mam nadzieję, że tym razem komunikat o błędzie jest nieco bardziej jasny. Python mówi, że coś „musi być ciągiem znaków, a nie liczbą całkowitą” (chociaż nie jest zbyt pomocny, ponieważ nie mówi Ci, który z operandów jest nieprawidłowy). Gdybyśmy naprawdę chcieli umieścić cyfrę 2 na końcu słowa „witaj”, moglibyśmy to zrobić, ujmu- jąc cyfrę
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Python. Zacznij programować!
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: