Określenie „nauka programowania” może onieśmielać. A nawet przerażać! Może więc… tworzenie gier? Brzmi lepiej, a na dodatek to świetny sposób na poznanie, jak możemy się komunikować z komputerami.

– Geek Tata

Python to niesamowicie rozwinięty język programowania z jednocześnie bardzo prostą i zbliżoną do mowy ludzkiej składnią. Dzięki tym zaletom stał się popularny wśród osób rozpoczynających swoją przygodę z programowaniem, bez względu na wiek czy też cel zdobywanej wiedzy. Poprzez zróżnicowane implementacje gier i interaktywnych przykładów w książce, każdy będzie w stanie przekonać się o potędze języka i samodzielnie przejść do jego wykorzystywania w codziennym życiu.

– Marcin Zajkowski, WOW SCHOOL

Książka ta wypełni nudne popołudnia, zmieni Twoje spojrzenie na gry i nauczy tworzenia własnych. To obowiązkowa pozycja dla każdego, kto chce - jako twórca - zanurzyć się w tym magicznym świecie wirtualnej rozrywki, od którego dzieli nas tylko szklana tafla ekranu, a jedynym ograniczeniem jest nasza wyobraźnia.

– Magazyn Programista

Dane oryginału

Invent Your Own Computer Games with Python, 4th Edition

Copyright © 2017 by Al. Sweigart.

All rights reserved.

Przekład WITKOM Witold Sikorski: Maciej Baranowski i Witold Sikorski

Projekt okładki polskiego wydania Hubert Zacharski

Ilustracja na okładce Josh Ellingson

Wydawca Łukasz Łopuszański

Redaktor prowadzący Adam Kowalski

Redaktor Małgorzata Dąbkowska-Kowalik

Koordynator produkcji Anna Bączkowska

Skład wersji elektronicznej na zlecenie Wydawnictwa Naukowego PWN Marcin Kapusta / konwersja.virtualo.pl

Książka, którą nabyłeś, jest dziełem twórcy i wydawcy. Prosimy, abyś przestrzegał praw, jakie im przysługują. Jej zawartość możesz udostępnić nieodpłatnie osobom bliskim lub osobiście znanym. Ale nie publikuj jej w internecie. Jeśli cytujesz jej fragmenty, nie zmieniaj ich treści i koniecznie zaznacz, czyje to dzieło. A kopiując jej część, rób to jedynie na użytek osobisty.

Szanujmy cudzą własność i prawo

Więcej na www.legalnakultura.pl

Polska Izba Książki

Copyright © 2017 by Al. Sweigart. Title of English language original: Invent Your Own Computer Games with Python, 4th Edition, ISBN: 978-1-59327-795-6, published by No Starch Press. Polish language edition Copyright © 2017 by Polish Scientific Publishers PWN Wydawnictwo Naukowe PWN Spółka Akcyjna. All rights reserved.

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

Warszawa 2017

ISBN 978-83-01-19400-0

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

SPIS TREŚCI

Wstęp do wydania polskiego

Wprowadzenie

Dla kogo przeznaczona jest ta książka?

Zawartość książki

Jak korzystać z tej książki

Numery wierszy i wcięcia

Długie wiersze kodu

Pobieranie i instalowanie Pythona

Uruchamianie IDLE

Pomoc online

1. Powłoka interaktywna

Kilka prostych działań matematycznych

Liczby całkowite i rzeczywiste

Wyrażenia

Wyznaczanie wartości wyrażeń

Błędy składniowe

Zapisywanie wartości w zmiennych

Podsumowanie

2. Pisanie programów

Wartości łańcuchowe

Konkatenacja łańcuchów

Pisanie programów w edytorze plików IDLE

Tworzenie programu „Hello World”

Zapisywanie programu

Wykonywanie programu

Jak działa program „Hello World”

Komentarze dla programistów

Funkcje: miniprogramy w programach

Koniec programu

Nadawanie nazw zmiennym

Podsumowanie

3. „Zgadnij, jaka to liczba”

Przykładowy przebieg gry „Zgadnij, jaka to liczba”

Kod źródłowy gry „Zgadnij, jaka to liczba”

Importowanie modułu random

Generowanie liczb losowych za pomocą funkcji random.randint()

Powitanie gracza

Instrukcje związane z przepływem sterowania

Używanie pętli do powtarzania kodu

Grupowanie w bloki

Pętle z instrukcjami for

Wczytywanie próby gracza

Konwersja wartości za pomocą funkcji int(), float() i str()

Logiczny typ danych

Operatory porównania

Sprawdzanie warunku za pomocą instrukcji warunkowych

Eksperymentowanie z wartościami logicznymi, operatorami porównania i warunkami

Różnica między = i ==

Instrukcje if

Wcześniejsze wychodzenie z pętli za pomocą instrukcji break

Sprawdzanie, czy gracz wygrał

Sprawdzanie, czy gracz przegrał

Podsumowanie

4. Program opowiadający dowcipy

Kilka przykładowych dowcipów

Kod źródłowy programu „Dowcipy”

Jak działa ten kod

Znaki ucieczki

Apostrofy i cudzysłowy

Parametr end funkcji print()

Podsumowanie

5. „Smocza kraina”

Zasady gry w „Smoczą krainę”

Przykładowy przebieg gry „Smocza kraina”

Schemat blokowy „Smoczej krainy”

Kod źródłowy „Smoczej krainy”

Importowanie modułów random i time

Funkcje w grze „Smocza kraina”

Instrukcje def

Wywoływanie funkcji

Gdzie umieszczać definicje funkcji

Łańcuchy wielowierszowe

Jak wykonywać pętle za pomocą instrukcji while

Operatory logiczne

Operator and

Operator or

Operator not

Wyznaczanie wartości wyrażeń z operatorami logicznymi

Zwracane wartości

Zasięg globalny i zasięg lokalny

Parametry funkcji

Wyświetlanie wyników gry

Decydowanie, w której jaskini mieszka przyjazny smok

Główna pętla gry

Wywoływanie funkcji w programie

Pytanie gracza, czy chce zagrać po raz kolejny

Podsumowanie

6. Korzystanie z debugera

Rodzaje błędów

Debuger

Uruchamianie debugera

Krok po kroku w trybie debugera

Znajdowanie błędów

Ustawianie pułapek

Korzystanie z pułapek

Podsumowanie

7. Projektowanie gry „Szubienica”z użyciem schematów blokowych

Zasady gry w „Szubienicę”

Przykładowy przebieg gry „Szubienica”

Grafika ASCII

Projektowanie programu z użyciem schematu blokowego

Tworzenie schematu blokowego

Rozgałęzienia w schemacie blokowym

Kończenie lub restartowanie gry

Powtórne zgadywanie

Informacja zwrotna dla gracza

Podsumowanie

8. Pisanie kodu gry „Szubienica”

Kod źródłowy gry „Szubienica”

Importowanie modułu random

Stałe

Listy jako typ danych

Dostęp do elementów przez indeksy

Konkatenacja list

Operator in

Wywoływanie metod

Metody listowe reverse() i append()

Metoda łańcuchowa split()

Wczytywanie tajnego słowa z listy

Wyświetlanie planszy

Funkcje list() i range()

Przycinanie list i łańcuchów

Wyświetlanie tajnego słowa z podkreśleniami

Wczytywanie strzału gracza

Metody łańcuchowe lower() i upper()

Opuszczanie pętli while

Instrukcje elif

Sprawdzanie, czy gracz podał prawidłową literę

Pytanie gracza, czy chce zagrać ponownie

Przegląd funkcji w grze „Szubienica”

Główna pętla gry

Wywoływanie funkcji wyświetlPlanszę()

Umożliwienie graczowi podania litery

Sprawdzanie, czy litera znajduje się w tajnym słowie

Sprawdzanie, czy gracz wygrał

Obsługa nieudanej próby odgadnięcia

Sprawdzanie, czy gracz przegrał

Kończenie lub resetowanie gry

Podsumowanie

9. Rozbudowa gry „Szubienica”

Zwiększanie liczby dozwolonych prób

Słowniki jako typ danych

Poznawanie rozmiarów słowników za pomocą funkcji len()

Różnica między słownikami i listami

Metody słownikowe keys() i values()

Korzystanie ze słowników w grze „Szubienica”

Losowe wybieranie z listy

Usuwanie elementów z listy

Przypisanie wielokrotne

Wyświetlanie informacji o kategorii słowa

Podsumowanie

10. „Kółko i krzyżyk”

Przykładowy przebieg gry w „Kółko i krzyżyk”

Kod źródłowy gry w „Kółko i krzyżyk”

Projektowanie programu

Przedstawienie planszy w postaci danych

Tworzenie strategii dla sztucznej inteligencji

Importowanie modułu random

Wyświetlanie planszy na ekranie

Umożliwienie graczowi wyboru znaku X lub O

Ustalanie, kto wykonuje pierwszy ruch

Umieszczanie znaku na planszy

Odwołania do list

Odwołania do list w funkcji wykonajRuch()

Sprawdzanie, czy gracz wygrał

Duplikacja danych planszy

Sprawdzanie, czy pole na planszy jest wolne

Umożliwianie graczowi wykonania ruchu

Wyznaczanie wartości „na skróty”

Wybieranie ruchu z listy

Wartość None

Tworzenie sztucznej inteligencji (SI)

Sprawdzanie, czy komputer może wygrać w jednym ruchu

Sprawdzanie, czy gracz może wygrać w jednym ruchu

Sprawdzanie pól narożnych, środkowego i bocznych (w tej właśnie kolejności)

Sprawdzanie, czy na planszy są jeszcze wolne pola

Główna pętla gry

Wybór znaku gracza i ustalenie rozpoczynającego

Ruch gracza

Ruch komputera

Pytanie gracza, czy chce zagrać ponownie

Podsumowanie

11. Dedukcyjna gra „Bagels”

Przykładowy przebieg gry „Bagels”

Kod źródłowy gry „Bagels”

Schemat blokowy gry „Bagels”

Importowanie modułu random i definiowanie funkcji uzyskajTajnąLiczbę()

Przestawianie kolejności cyfr

Zmiana kolejności elementów na liście za pomocą funkcji random.shuffle()

Uzyskiwanie tajnej liczby z przestawionych cyfr

Skrótowe operatory przypisania

Ustalanie, jaką podpowiedź wyświetlić

Metoda listowa sort()

Metoda łańcuchowa join()

Sprawdzanie, czy łańcuch zawiera jedynie cyfry

Rozpoczynanie gry

Interpolacja łańcuchów

Główna pętla gry

Wczytywanie próby odgadnięcia

Ustalanie podpowiedzi do strzału gracza

Sprawdzanie, czy gracz wygrał albo przegrał

Pytanie gracza, czy chce zagrać ponownie

Podsumowanie

12. Układ współrzędnych kartezjańskich

Siatki i współrzędne kartezjańskie

Liczby ujemne

Układ współrzędnych na ekranie komputera

Sztuczki matematyczne

Sztuczka 1: Minus pożera znak plusa znajdujący się po jego lewej stronie

Sztuczka 2: Dwa minusy łączą się w plus

Sztuczka 3: Dwie dodawane liczby mogą zamienić się miejscami

Wartości bezwzględne i funkcja abs()

Podsumowanie

13. Gra „Poszukiwanie skarbu sonarem”

Przykładowy przebieg gry „Poszukiwanie skarbu sonarem”

Kod źródłowy gry „Poszukiwanie skarbu sonarem”

Projektowanie programu

Importowanie modułów random, sys i math

Tworzenie nowej planszy do gry

Rysowanie planszy do gry

Rysowanie współrzędnych x wzdłuż górnej krawędzi planszy

Rysowanie oceanu

Wyświetlanie rzędu oceanu

Rysowanie współrzędnych x na dole planszy

Tworzenie losowych skrzyń ze skarbami

Ustalanie, czy ruch jest prawidłowy

Wykonywanie ruchu na planszy

Znajdowanie najbliższej skrzyni ze skarbami

Usuwanie wartości za pomocą listowej metody remove()

Wczytywanie ruchu gracza

Wyświetlanie instrukcji gry dla gracza

Główna pętla gry

Wyświetlanie informacji o stanie gry

Obsługa ruchu gracza

Znajdowanie zatopionej skrzyni ze skarbami

Sprawdzanie, czy gracz wygrał

Sprawdzanie, czy gracz przegrał

Kończenie programu za pomocą funkcji sys.exit()

Podsumowanie

14. „Szyfr Cezara”

Kryptografia i szyfrowanie

Jak działa szyfr Cezara

Przykładowe działanie programu „Szyfr Cezara”

Kod źródłowy programu „Szyfr Cezara”

Ustawianie maksymalnej długości klucza

Podejmowanie decyzji o zaszyfrowaniu lub odszyfrowaniu wiadomości

Wczytywanie tekstu podanego przez gracza

Wczytywanie klucza podanego przez gracza

Szyfrowanie lub odszyfrowywanie komunikatu

Znajdowanie przekazanych łańcuchów za pomocą metody find()

Szyfrowanie lub odszyfrowywanie każdej litery

Uruchamianie programu

Technika siłowa

Dodawanie trybu siłowego łamania kodu

Podsumowanie

15. Gra „Reversegam”

Jak grać w „Reversegam”

Przykładowy przebieg gry „Reversegam”

Kod źródłowy gry „Reversegam”

Importowanie modułów i konfiguracja stałych

Struktura danych z planszą gry

Rysowanie struktury danych z planszą na ekranie

Tworzenie nowej struktury danych z planszą

Sprawdzanie, czy ruch jest prawidłowy

Sprawdzanie każdego z ośmiu kierunków

Sprawdzanie, czy są jakieś pionki do odwrócenia

Sprawdzanie poprawności podanych współrzędnych

Uzyskiwanie listy wszystkich możliwych ruchów

Wywoływanie funkcji bool()

Uzyskiwanie wyniku z planszy

Wczytywanie wyboru pionka przez gracza

Ustalanie, kto ma wykonać pierwszy ruch

Umieszczanie pionka na planszy

Kopiowanie struktury danych z planszą

Ustalanie, czy pole narożne jest wolne

Wczytywanie ruchu gracza

Ustalanie ruchu komputera

Strategiczne znaczenie pól narożnych

Uzyskiwanie listy najlepszych ruchów

Wyświetlanie wyników na ekranie

Rozpoczynanie gry

Sprawdzanie możliwości wykonania ruchu

Tura gracza

Tura komputera

Główna pętla gry

Pytanie gracza, czy chce zagrać ponownie

Podsumowanie

16. Symulacja SI w grze „Reversegam”

Komputer ma grać sam ze sobą

Przykładowy przebieg symulacji 1

Kod źródłowy symulacji 1

Usuwanie tekstów wyświetlanych graczowi i dodawanie komputerowego gracza

Komputer ma zagrać sam ze sobą wiele razy

Przykładowy przebieg symulacji 2

Kod źródłowy symulacji 2

Śledzenie wielu gier

Zasłanianie wywołań funkcji print() komentarzem

Procentowa ocena wyników SI

Porównywanie różnych algorytmów SI

Kod źródłowy symulacji 3

Jak działa SI w symulacji 3

Porównanie SI

Podsumowanie

17. Tworzenie grafiki

Instalowanie modułu pygame

„Hello World” w module pygame

Przykładowy przebieg programu „Hello World” napisanego z użyciem pygame

Kod źródłowy programu „Hello World” w wersji pygame

Importowanie modułu pygame

Inicjalizacja pygame

Konfiguracja okna pygame

Krotki

Obiekty Surface

Konfiguracja zmiennych z kolorami

Wypisywanie tekstu w oknie pygame

Używanie czcionek do stylizacji tekstu

Renderowanie obiektu Font

Ustawianie położenia tekstu za pomocą atrybutów Rect

Wypełnianie obiektu Surface kolorem

Funkcje związane z rysowaniem w module pygame

Rysowanie wielokąta

Rysowanie linii

Rysowanie okręgu

Rysowanie elipsy

Rysowanie prostokąta

Kolorowanie pikseli

Metoda blit() dla obiektów Surface

Rysowanie obiektu Surface na ekranie

Zdarzenia i główna pętla gry

Uzyskiwanie obiektów Event

Opuszczanie programu

Podsumowanie

18. Grafika animowana

Przykładowy przebieg programu „Animacja”

Kod źródłowy programu „Animacja”

Przemieszczanie i odbijanie się ramek od krawędzi okna

Konfiguracja stałych

Stałe reprezentujące kierunki

Stałe oznaczające kolory

Konfiguracja struktur danych z ramkami

Główna pętla gry

Kod pozwalający wyjść z gry

Przemieszczanie każdej ramki

Odbijanie się ramek od krawędzi okna

Rysowanie ramek w oknie w nowym położeniu

Rysowanie okna na ekranie

Podsumowanie

19. Wykrywanie kolizji

Przykładowy przebieg programu „Wykrywania kolizji”

Kod źródłowy programu „Wykrywanie kolizji”

Importowanie modułów

Sterowanie szybkością programu za pomocą obiektu Clock

Konfiguracja okna i struktur danych

Konfiguracja zmiennych do śledzenia ruchu

Obsługa zdarzeń

Obsługa zdarzenia KEYDOWN

Obsługa zdarzenia KEYUP

Teleportowanie gracza

Dodawanie nowych kwadracików z pożywieniem

Poruszanie postacią gracza w obrębie okna

Rysowanie postaci gracza w oknie

Sprawdzanie, czy wystąpiła kolizja

Rysowanie w oknie kwadracików pożywienia

Podsumowanie

20. Wykorzystywanie dźwięków i obrazków

Dodawanie obrazów za pomocą duszków

Pliki dźwiękowe i obrazkowe

Przykładowy przebieg programu „Duszki i dźwięki”

Kod źródłowy programu „Duszki i dźwięki”

Konfiguracja okna i struktury danych

Dodawanie duszka

Zmiana rozmiaru duszka

Konfigurowanie muzyki i dźwięków

Dodawanie plików dźwiękowych

Włączanie i wyłączanie dźwięku

Rysowanie w oknie postaci gracza

Sprawdzanie kolizji

Rysowanie czereśni w oknie

Podsumowanie

21. „Dodger” – gra z obrazem i dźwiękiem

Powtórka z podstawowych typów danych pygame

Przykładowy przebieg gry „Dodger”

Kod źródłowy gry „Dodger”

Importowanie modułów

Konfiguracja stałych

Definiowanie funkcji

Zatrzymywanie i pauzowanie gry

Sprawdzanie kolizji z paskudami

Rysowanie tekstu w oknie

Inicjalizacja pygame i konfiguracja okna

Konfiguracja obiektów Font, Sound i Image

Wyświetlanie ekranu startowego

Rozpoczynanie gry

Główna pętla gry

Obsługa zdarzeń klawiatury

Obsługa ruchów myszy

Dodawanie nowych paskud

Poruszanie postacią gracza i paskudami

Implementacja kodów oszukiwania

Usuwanie paskud

Rysowanie okna

Wyświetlanie wyniku gracza

Rysowanie postaci gracza oraz paskud

Sprawdzanie kolizji

Ekran z napisem Game Over

Modyfikowanie gry „Dodger”

Podsumowanie

Przypisy

Wstęp do wydania polskiego

Przygotowując polskie wydanie kolejnej książki z serii Dla dzieci (poprzednie tytuły: „JavaScript dla dzieci. Programowanie na wesoło”, „Python dla dzieci. Wprowadzenie do programowania na wesoło” i „Nauka programowania z Minecraftem”), wydawca wraz z zespołem tłumaczącym zdecydowali – tak jak poprzednio – o spolszczeniu wszystkich przykładowych programów.

Uzasadnieniem tego zabiegu jest nie tylko ułatwienie nauki osobom, które nie znają języka angielskiego; dzięki temu polskiemu Czytelnikowi łatwiej odróżnić stałe elementy języka programowania (nazwy wbudowanych funkcji, modułów, itp.) od tych, przy tworzeniu których można wykazać się kreatywnością, a jednocześnie wyrobić sobie nawyk opisowego, logicznego stosowania nazw zmiennych, co przydaje się np. w czasie programowania zespołowego. Polskie znaki można bez problemu stosować zarówno w interaktywnej powłoce, jak i edytorze plików Pythona.

Ponadto, mimo że większość prezentowanych w książce gier jest w naszym kraju świetnie znana, przetłumaczenie kodu, a w szczególności komunikatów i instrukcji dla gracza, umożliwia wstępną rozgrywkę i – zgodnie z intencjami autora – zapoznanie się z działającym programem jeszcze przed przystąpieniem do nauki. Paczkę ze spolszczonymi plikami można pobrać spod adresu: http://smartkids.pwn.pl/material/python-dla-dzieci-materialy/.

Ważna uwaga: struktura programów w Pythonie opiera się na tzw. blokach, wydzielanych w kodzie za pomocą spacji umieszczanych na początku wierszy (najczęściej w liczbie 4 lub 8). Podział na bloki zwiększa czytelność kodu, choć wcale to nie jest ich podstawowa rola; bloki muszą być stosowane konsekwentnie i zgodnie z prawidłami języka, bo inaczej program nie zadziała. Ponieważ szerokość strony w książce nie daje możliwości wydrukowania wszystkich wierszy tak, jak powinny zostać wpisane, czyli w jednym kawałku, w kodzie źródłowym zastosowano ich numerację, aby podczas przepisywania i analizowania kodu Czytelnik wiedział, gdzie się zaczyna i gdzie kończy każdy wiersz.

WPROWADZENIE

Gdy jako dziecko zacząłem grać w gry wideo, stałem się nałogowym graczem. Ale nie wystarczała mi sama zabawa – chciałem tworzyć gry. Znalazłem książkę (podobną do tej), z której nauczyłem się, jak pisać pierwsze programy i gry. To było miłe i sprawiało mi przyjemność. Pierwsze napisane przez mnie gry przypominały te umieszczone w tej książce. Nie dorównywały grom Nintendo, które kupowali mi rodzice, ale były napisane przeze mnie.

Teraz, jako człowiek dorosły, nadal lubię programować . I do tego na tym zarabiam. Ale nawet jeśli nie chcesz zostać programistą, umiejętność programowania jest przydatna i daje satysfakcję . Pozwala szkolić umysł w zakresie logicznego myślenia i planowania oraz ponownego analizowania swoich pomysłów, gdy okaże się, że w kodzie są błędy.

Większość książek przeznaczonych dla początkujących programistów należy do jednej z dwóch kategorii. Pierwsza obejmuje książki, które nie tyle uczą programowania, ile używania „oprogramowania do tworzenia gier” lub języków, które tak upraszczają ten proces, że przestaje to być nauką programowania. Druga kategoria obejmuje książki, które uczą programowania podobnie jak podręczniki do matematyki – zawierają opis zasad i pojęć, a nie dają czytelnikom wielu przykładów z życia. W tej książce przyjąłem inna metodę – uczę programowania, tworząc gry wideo. Od samego początku pokazuję kod źródłowy opisywanych gier, tłumacząc zasady na przykładach. W taki sposób sam uczyłem się programowania i było to dla mnie bardzo ważne. Im więcej dowiadywałem się o działaniu programów napisanych przez inne osoby, tym więcej miałem pomysłów na swoje własne.

Wszystko, czego potrzebujesz to komputer, bezpłatne oprogramowanie zwane interpreterem języka Python i ta książka. Gdy już nauczysz się z tej książki, jak tworzyć gry, własne będziesz tworzyć samodzielnie.

Komputery to niezwykłe urządzenia, a nauka programowania nie jest tak trudna, jak się wielu wydaje. Program komputerowy to zestaw poleceń zrozumiałych dla komputera, podobnie jak opowiadanie składa się z wielu zdań zrozumiałych dla czytelnika. Polecenia dla komputera przygotowujemy, pisząc program w zrozumiałym dla komputera języku. Dzięki tej książce nauczysz się programować w języku programowania o nazwie Python. Można nauczyć się wielu innych języków programowania, a wśród nich są BASIC, Java, JavaScript, PHP i C++.

Ja, będąc dzieckiem, nauczyłem się języka BASIC, ale Python, jako nowszy język programowania, jest jeszcze łatwiejszy do nauki. Pythona używają także zawodowi programiści – zarówno w pracy, jak i dla przyjemności. Ponadto można go zainstalować i korzystać z niego całkiem za darmo – wystarczy mieć połączenie z Internetem, aby go pobrać.

Ponieważ gry wideo są zwykłymi programami, składają się one z poleceń. Gry, które utworzysz na podstawie tej książki, wydają się proste w porównaniu z grami na Xbox, PlayStation czy Nintendo. Nie mają one wyszukanej grafiki, bo ich zadaniem jest nauka podstaw programowania. Celowo są proste, aby można było skupić się na nauce programowania. Gry nie muszą być skomplikowane, aby były fajne!

Dla kogo przeznaczona jest ta książka?

Programowanie nie jest trudne, ale trudno znaleźć materiały, z których można się nauczyć, jak za jego pomocą zrobić coś ciekawego. Inne książki komputerowe zawierają wiele treści, które nie są potrzebne początkującym programistom. Dzięki tej książce dowiesz się, jak programować własne gry; opanujesz przydatne umiejętności, bawiąc się przy tym grami będącymi ilustracją nauki. Książka ta jest przeznaczona dla:

• zupełnych nowicjuszy, którzy chcą nauczyć się programowania, nawet jeśli nie mają żadnego wcześniejszego doświadczenia;

• dzieci i nastolatków, którzy chcą nauczyć się programowania, tworząc gry;

• dorosłych i nauczycieli, którzy chcą uczyć innych programowania;

• każdego – młodego czy starego – kto chce nauczyć się programować, poznając profesjonalny język programowania.

Zawartość książki

W większości rozdziałów tej książki znajdziesz omówienie i wyjaśnienie jednej gry. Kilka rozdziałów dotyczy innych przydatnych tematów, takich jak wyszukiwanie błędów (debugowanie). Nowe pojęcia programistyczne są tłumaczone w miarę wykorzystywania ich przez gry, a rozdziały trzeba czytać po kolei. Oto krótki przegląd zawartości wszystkich rozdziałów.

• Rozdział 1: Powłoka interaktywna zawiera objaśnienie, jak korzystać z powłoki interaktywnej Pythona do sprawdzania kodu wiersz po wierszu.

• Rozdział 2: Pisanie programów zawiera zasady pisania pełnych programów w edytorze plików Pythona.

• W rozdziale 3: „Zgadnij, jaka to liczba”, napiszesz pierwszy program z tej książki, „Zgadnij, jaka to liczba”. Prosi on gracza o odgadnięcie nieznanej liczby, a następnie podaje mu wskazówki, czy podana przez niego liczba jest za duża czy za mała.

• W rozdziale 4: Program opowiadający dowcipy napiszesz prosty program, który „opowiada” użytkownikowi kilka dowcipów.

• W rozdziale 5: „Smocza kraina” zaprogramujesz zgadywankę, w której gracz musi wybrać jedną z dwóch jaskiń ze smokami: jeden z nich jest przyjazny, a drugi bardzo głodny.

• W rozdziale 6: Korzystanie z debugera dowiesz się, jak używać debugera do poprawiania błędów w kodzie.

• Rozdział 7: Projektowanie gry „Szubienica” z wykorzystaniem schematów blokowych zawiera objaśnienie, jak używać schematu blokowego do planowania dłuższych programów. Takim programem jest gra w „Szubienicę”.

• W rozdziale 8: Pisanie kodu gry „Szubienica” napiszesz tę grę na podstawie schematu blokowego przygotowanego w rozdziale 7.

• W rozdziale 9: Rozbudowa gry „Szubienica” rozszerzymy grę o dodatkowe funkcje, wprowadzając używany w Pythonie typ danych słownikowych.

• W rozdziale 10: „Kółko i krzyżyk” dowiesz się, jak napisać grę w kółko i krzyżyk rozgrywaną między człowiekiem a komputerem, w której wykorzystujemy sztuczną inteligencję.

• W rozdziale 11: Dedukcyjna gra „Bagels” nauczysz się, jak utworzyć grę dedukcyjną o nazwie „Bagels”, w której gracz musi odgadnąć ukryte liczby na podstawie podanych wskazówek.

• Rozdział 12: Układ współrzędnych kartezjańskich zawiera omówienie układu współrzędnych, który jest używany w wielu kolejnych grach.

• W rozdziale 13: Gra „Poszukiwanie skarbu sonarem” dowiesz się, jak napisać grę w poszukiwanie skarbu, w której gracz poszukuje w oceanie skrzyń z zagubionymi skarbami.

• W rozdziale 14: „Szyfr Cezara” utworzysz prosty program szyfrujący, który pozwala na pisanie i kodowanie ukrytych komunikatów.

• W rozdziale 15: Gra „Reversegam” zaprogramujesz skomplikowaną grę między człowiekiem a komputerem, w której przeciwnik w postaci sztucznej inteligencji jest praktycznie niepokonany.

• W rozdziale 16: Symulacja SI w grze „Reversegam” gra z rozdziału 15 zostaje rozwinięta, aby kilka sztucznych inteligencji konkurowało w grze komputera z komputerem.

• Rozdział 17: Tworzenie grafiki zawiera wprowadzenie modułu pygame języka Python i opis sposobu wykorzystania go do tworzenia grafiki dwuwymiarowej (2D).

• W rozdziale 18: Animowana grafika pokazano, jak wykorzystać moduł pygame do animacji grafiki.

• W rozdziale 19: Wykrywanie kolizji nauczysz się, jak wykryć kolizje między obiektami w dwuwymiarowej grze.

• W rozdziale 20: Wykorzystywanie dźwięków i obrazów usprawnisz swoje proste gry z pygame, dodając do nich dźwięki i obrazy.

• W rozdziale 21: „Dodger” – gra z obrazem i dźwiękiem łączymy pojęcia z rozdziałów od 17 do 20, aby utworzyć animowaną grę o nazwie „Dodger”.

Jak korzystać z tej książki

Większość rozdziałów tej książki rozpoczyna się od przykładowego uruchomienia omawianego programu. Taka próbka pokazuje, jak program wygląda podczas działania. Teksty wprowadzane przez użytkownika są pogrubione.

Kod programu lepiej wprowadzać w edytorze plików IDLE, a nie kopiować go i wklejać. Wpisując samodzielnie kod, więcej z niego zapamiętasz.

Numery wierszy i wcięcia

Wpisując kod źródłowy, nie należy wprowadzać numeru wiersza na początku każdego wiersza. Na przykład w poniższym wierszu kodu nie wpisujemy 9. po lewej stronie ani odstępu po kropce:

9. liczba = random.randint(1, 20)

Wprowadzamy tylko to:

liczba = random.randint(1, 20)

Numeracja wierszy jest umieszczona w książce tylko po to, aby łatwiej było odwoływać się do poszczególnych wierszy programu. Numery te nie są częścią kodu źródłowego.

Poza numerami wierszy należy wprowadzać kod dokładnie tak jak jest napisany w książce. Warto zauważyć, że niektóre wiersze są wcięte o cztery, osiem lub więcej spacji. Spacje na początku wiersza zmieniają sposób, w jaki Python interpretuje polecenia, są więc bardzo istotne i nie można ich pominąć.

Popatrz na przykład. Spacje są tu zaznaczone czarnymi kółeczkami (•), aby łatwiej było je zauważyć.

while strzały < 10:

••••if liczba == 42:

••••••••print('Hello')

Pierwszy wiersz nie ma wcięcia, drugi jest wcięty na cztery spacje, zaś trzeci ma wcięcie wynoszące osiem spacji. Wprawdzie w przykładach z książki nie ma tych czarnych kółeczek, ale każdy znak w IDLE ma tę samą szerokość, więc można policzyć liczbę spacji na podstawie znaków w wierszu powyżej lub poniżej.

Długie wiersze kodu

Niektóre polecenia są zbyt długie, aby zmieściły się w jednym wierszu i będą w książce przeniesione do kolejnego wiersza. Wiersz zmieści się jednak na ekranie i należy go wpisywać bez naciskania klawisza ENTER. Początek nowego polecenia łatwo rozpoznać po numerze wiersza umieszczonym po lewej stronie. W poniższym przykładzie są tylko dwa polecenia:

1. print('To jest pierwsze polecenie!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')

2. print('To jest drugie, a nie trzecie polecenie.')

Pierwsze z nich przechodzi do drugiego wiersza, ale nie ma on numeru, więc jest to dalej wiersz numer 1 kodu.

Pobieranie i instalowanie Pythona

Musisz zainstalować program określany jako interpreter Pythona. Jest to program, który rozumie polecenia pisane w języku Python. Od tego miejsca będę nazywał interpreter Pythona po prostu Pythonem.

W tym punkcie pokażę, jak pobrać i zainstalować Pythona 3 – a konkretnie wersję Python 3.4 – dla systemu Windows, OS X lub Ubuntu. Są już nowsze wersje Pythona, ale moduł pygame, który jest używany w rozdziałach od 17 do 21, jest aktualnie obsługiwany tylko przez wersje do 3.4.

Trzeba wiedzieć, że istnieją istotne różnice pomiędzy wersjami Python 2 i Python 3. Programy w tej książce korzystają z Pythona 3 i próba ich uruchomienia w Pythonie 2 spowoduje pojawienie się błędów. Jest to na tyle ważne, że dodałem rysunek pingwina, aby o tym przypomnieć.

W systemie Windows pobierz instalator Windows x86-64 MSI z witryny https://www.python.org/downloads/release/python-344/, a potem dwukrotnie go kliknij. Być może trzeba będzie wprowadzić hasło administratora komputera.

Aby zainstalować Pythona, postępuj zgodnie z instrukcjami instalatora, które pojawiają się na ekranie, jak podano poniżej:

1. Wybierz Install for All Users (Zainstaluj dla wszystkich użytkowników), a następnie kliknij Next (Dalej).

2. Zainstaluj program w folderze C:\Python34, klikając Next.

3. Kliknij Next, aby pominąć część Customize Python (Dostosuj Pythona).

W systemie OS X pobierz instalator Mac OS X 64-bit/32-bit z witryny https://www.python.org/downloads/release/python-344/, a następnie dwukrotnie go kliknij. Postępuj zgodnie z instrukcjami, które pojawiają się na ekranie, jak podano poniżej:

1. Jeśli pojawi się ostrzeżenie „‘Python.mpkg’ can’t be opened because it is from an unidentifed developer” (Nie można otworzyć Python.mpkg, gdyż pochodzi z nieznanego źródła), podczas dwukrotnego kliknięcia należy przytrzymać klawisz Ctrl, a następnie wybrać z pojawiającego się menu opcję Open (Otwórz). Może być konieczne podanie hasła administratora twojego komputera.

2. W części Welcome kliknij Continue (Kontynuuj), a następnie kliknij Agree, aby wyrazić zgodę na warunki licencji.

3. Wybierz Macintosh HD (lub inny dysk twardy na swoim komputerze), a następnie kliknij Install (Zainstaluj).

Jeśli masz system Ubuntu, możesz zainstalować Pythona z Centrum Oprogramowania Ubuntu, wykonując poniższe kroki:

1. Otwórz Centrum Oprogramowania Ubuntu.

2. Wprowadź Python w polu wyszukiwania, w prawym górnym rogu okna.

3. Wybierz IDLE (Python 3.4 GUI 64 bit).

4. Kliknij Install. Może być konieczne podanie hasła administratora twojego komputera

Jeśli powyższe kroki nie odniosą skutku, innych metod instalacji Pythona 3.4 można poszukać na witrynie https://www.nostarch.com/inventwithpython/.

Uruchamianie IDLE

IDLE to skrót od for Interactive DeveLopment Environment (Interaktywne środowisko programistyczne). IDLE to rodzaj edytora tekstów przeznaczonego do pisania programów w Pythonie. Uruchamianie IDLE wygląda inaczej dla każdego systemu operacyjnego:

• W systemie Windows kliknij menu Start w lewym dolnym rogu ekranu, wpisz IDLE, a następnie wybierz IDLE (Python GUI).

• W systemie OS X otwórz Finder i kliknij Applications (Aplikacje). Dwukrotnie kliknij Python 3.x, a następnie dwukrotnie kliknij ikonę IDLE.

• W systemie Ubuntu lub innej wersji systemu Linux otwórz okno terminalu i wpisz idle3. Może też trzeba będzie kliknąć Applications u góry ekranu. Następnie kliknij Programming i IDLE 3.

Przy pierwszym uruchomieniu IDLE pojawi się okno z powłoką interaktywną, co widać na rysunku 1. W powłoce tej możesz wpisywać polecenia języka Python po zgłoszeniu w postaci >>>, a Python wykona te polecenia . Po wykonaniu polecenia przez komputer pojawi się kolejne zgłoszenie >>>, a system będzie czekał na kolejne polecenie.

Rysunek 1. Powłoka interaktywna w IDLE

Pomoc online

Pliki z kodem źródłowym, wraz z innymi zasobami związanymi z książką, znajdują się na witrynie http://smartkids.pwn.pl/material/python-dladzieci-materialy/. Jeśli chcesz zadać pytanie związane z programami z tej książki, możesz odwiedzić witrynę https://reddit.com/r/inventwithpython/ lub napisać email z pytaniem do autora na adres al@inventwithpython.com.

Zanim zadasz pytanie:

• Sprawdź, czy podczas przepisywania programu z książki nie został popełniony błąd.

• Sprawdź w sieci, czy ktoś nie zadał wcześniej tego samego pytania i nie otrzymał na nie odpowiedzi.

Pamiętaj, że im lepiej sformułujesz pytania, tym lepiej inni będą mogli ci pomóc. Zadając pytania zawsze pamiętaj, aby:

• Wyjaśnić działanie wykonywane, gdy pojawił się błąd. To pomoże zorientować się, czy nie znajdujesz się na całkiem niewłaściwej drodze.

• Skopiować i wkleić cały komunikat o błędzie i swój kod programu.

• Podać nazwę i wersję systemu operacyjnego.

• Wyjaśnić, jakie próby rozwiązania problemu były podejmowane. To pokaże, że przed zadaniem pytania została podjęta przez ciebie próba samodzielnego rozwiązania problemu.

• Bądź uprzejmy. Nie żądaj natychmiastowej pomocy i nie wywieraj presji na udzielających odpowiedzi.

Gdy już wiesz, jak prosić o pomoc, możesz zacząć naukę programowania własnych gier!

1
POWŁOKA INTERAKTYWNA

Zanim nauczysz się pisać gry, musisz opanować kilka podstawowych pojęć programistycznych. Rozdział ten zaczniemy od poznania sposobu korzystania z interaktywnej powłoki Pythona i wykonywania podstawowych działań arytmetycznych.

TEMATY OMÓWIONE W TYM ROZDZIALE

• Operatory

• Liczby całkowite i rzeczywiste

• Wartości

• Wyrażenia

• Błędy składniowe

• Zapisywanie wartości w zmiennych

Kilka prostych działań matematycznych

Uruchom IDLE, tak jak to opisano w punkcie „Uruchamianie IDLE”, na stronie xxv. Najpierw użyjemy Pythona do rozwiązania kilku prostych zadań matematycznych. Powłoka interaktywna może pełnić rolę kalkulatora. Po znaku zgłoszenia powłoki wpisujemy 2 + 2 i naciskamy ENTER. (Na niektórych klawiaturach klawisz ten nazywa się RETURN.) Na rysunku 1.1 pokazano, jak w powłoce interaktywnej wygląda to zadanie matematyczne – widzimy, że wynikiem jest liczba 4.

Rysunek 1.1. Wpisywanie 2 + 2 w powłoce interaktywnej

To zadanie matematyczne można rozwiązać za pomocą prostego polecenia programistycznego. Znak plus (+) informuje komputer, że należy dodać liczby 2 i 2. Komputer robi to i w kolejnym wierszu podaje w odpowiedzi liczbę 4. W tabeli 1.1 zebrano pozostałe symbole matematyczne dostępne w Pythonie.

Tabela 1.1. Operatory matematyczne

Operator

Działanie

+

Dodawanie

-

Odejmowanie

*

Mnożenie

/

Dzielenie

Minus (-) służy do odejmowania liczb, gwiazdka (*) do ich mnożenia, a prawy ukośnik (/) do dzielenia liczb. Używane w ten sposób symbole +, -, * i / są nazywane operatorami. Operatory mówią Pythonowi, co ma robić ze stojącymi przy nich liczbami.

Liczby całkowite i rzeczywiste

Liczby całkowite (ang. integer, w skrócie int) to na przykład 4, 99 i 0. Liczby rzeczywiste (ang. floating-point, w skrócie float), nazywane w informatyce wartościami zmiennoprzecinkowymi, to liczby z częścią ułamkową, czyli mające cyfry po przecinku, np. 3.5, 42.1 i 5.0. Zatem 5 jest w Pythonie liczbą całkowitą, a 5.0 to liczba rzeczywista[1].

Liczby te nazywane są wartościami (ang. value). (Później, oprócz liczb, poznamy jeszcze inne rodzaje wartości.) W zadaniu matematycznym, które wpisaliśmy w powłoce, 2 i 2 to wartości całkowitoliczbowe.

Wyrażenia

Zadanie matematyczne 2 + 2 to przykład wyrażenia (ang. expression). Jak widzimy na rysunku 1.2, wyrażenia składają się z wartości (liczb) połączonych operatorami (symbole matematyczne) i tworzą nową wartość, która może być użyta w kodzie. Komputery potrafią przetwarzać miliony wyrażeń w ciągu sekund.

Rysunek 1.2. Wyrażenie składa się z wartości i operatorów

Wpiszmy kilka z tych wyrażeń w powłoce interaktywnej, naciskając ENTER po każdym z nich:

>>> 2+2+2+2+2

10

>>> 8*6

48

>>> 10-5+6

11

>>> 2 +      2

4

Wszystkie te wyrażenia wyglądają jak zwykłe równania matematyczne, ale zwróćmy uwagę na spacje w przykładzie 2 +      2. W Pythonie między wartościami i operatorami można umieścić dowolną liczbę spacji. Jednak wpisując polecenia w powłoce interaktywnej, trzeba zawsze zaczynać od początku wiersza (bez spacji).

Wyznaczanie wartości wyrażeń

Gdy komputer rozwiązuje wyrażenie 10 + 5 i zwraca wartość 15, mówimy, że wyznaczył wartość (ang. evaluate) tego wyrażenia. Wyznaczenie wartości wyrażenia to zastąpienie go pojedynczą wartością, tak jak rozwiązanie zadania matematycznego to sprowadzenie go do jednej liczby: odpowiedzi. Na przykład wyznaczoną wartością zarówno wyrażenia 10 + 5, jak i 10 + 3 + 2, jest 15.

Gdy Python wyznacza wartość jakiegoś wyrażenia, przestrzega kolejności wykonywania działań obowiązującej w matematyce. Oto kilka z tych zasad:

• Najpierw wyznaczana jest wartość tych części wyrażenia, które znajdują się w nawiasach.

• Mnożenie i dzielenie są wykonywane przed dodawaniem i odejmowaniem.

• Wyznaczanie wartości odbywa się od lewej do prawej.

Wartość wyrażenia 1 + 2 * 3 + 4 zostaje wyznaczona na 11, a nie na 13, ponieważ na początku wykonywane jest mnożenie 2 * 3. Gdyby wyrażeniem było (1 + 2) * (3 + 4), wynikiem byłaby wartość 21, ponieważ fragmenty w nawiasach, (1 + 2) i (3 + 4), są obliczane przed mnożeniem.

Wyrażenia mogą zawierać dowolną liczbę działań, lecz wyznaczona wartość zawsze jest jedna. Nawet pojedyncze wartości to wyrażenia. Na przykład wyrażenie 15 zostaje sprowadzone do wartości 15. A wartość wyrażenia 8 * 3 / 2 + 2 + 7 – 9 zostanie wyznaczona na 12.0 w następujący sposób:

Mimo że komputer wykonuje wszystkie powyższe działania, nie zobaczymy ich w powłoce interaktywnej, a jedynie ich wynik:

>>> 8 * 3 / 2 + 2 + 7 – 9

12.0

Zwróćmy uwagę, że wartością wyznaczaną wyrażeń z operatorem dzielenia, /, jest zawsze liczba rzeczywista; na przykład wynikiem wyrażenia 24 / 2 jest 12.0. To samo dotyczy każdego działania matematycznego, które zawiera choćby jedną wartość zmiennoprzecinkową, więc wynikiem 12.0 + 2 jest 14.0.

Błędy składniowe

Jeśli w powłoce interaktywnej wpiszesz 5 +, otrzymasz poniższy komunikat o błędzie:

>>> 5 +

SyntaxError: invalid syntax

Ten błąd pojawił się, ponieważ 5 + nie jest wyrażeniem. Wyrażenia zawierają wartości połączone operatorami, a operator + oczekuje wartości przed i po nim. Komunikat o błędzie pojawia się przy braku takiej oczekiwanej wartości.

SyntaxError oznacza, że Python nie rozumie polecenia, ponieważ zostało wpisane nieprawidłowo. Programowanie komputerów to nie tylko wydawanie komputerom poleceń do wykonania, ale również wiedza, jak robić to prawidłowo.

Nie należy się jednak przejmować popełnianiem pomyłek. Błędy nie uszkodzą komputera. Musisz po prostu raz jeszcze wpisać – tym razem prawidłowo – polecenie w powłoce interaktywnej, po kolejnym zgłoszeniu >>>.

Zapisywanie wartości w zmiennych

Po wyznaczeniu wartości wyrażenia można ją zapisać w zmiennej (ang. variable), aby móc ją później wykorzystać. Zmienna to pewnego rodzaju pudełko służące do przechowywania wartości.

Instrukcja przypisania (ang. assignment statement) spowoduje zapisanie wartości w zmiennej. Najpierw wpisujesz nazwę zmiennej, następnie znak równości (=) zwany operatorem przypisania, a na końcu wartość, którą chcesz zapisać w tej zmiennej. Dla przykładu, wpisz w powłoce:

>>> mielonka = 15

>>>

W pudełku zmiennej mielonka znajduje się teraz wartość 15 (patrz rys. 1.3).

Rysunek 1.3. Zmienne są jak pudełka, w których można przechowywać wartości

Po naciśnięciu klawisza ENTER nie dostaniesz żadnej odpowiedzi. Jeśli w Pythonie nie pojawi się żaden komunikat o błędzie, to oznacza, że polecenie zakończyło się powodzeniem. Pojawia się wtedy znak zgłoszenia >>>, po którym można wprowadzać kolejne polecenia.

W przeciwieństwie do wyrażeń, instrukcje (ang. statement) to polecenia, które nie wyznaczają żadnej wartości. Dlatego właśnie w powłoce interaktywnej, w nowym wierszu po mielonka = 15 nic nie jest wyświetlane. Jeśli nie masz pewności, czy dane polecenie jest wyrażeniem czy instrukcją, przypomnij sobie, że wyrażenia dają nam pojedynczą wartość. Wszystkie pozostałe polecenia to instrukcje.

W zmiennych przechowywane są wartości, a nie wyrażenia. Weźmy na przykład wyrażenia w instrukcjach mielonka = 10 + 5 i mielonka = 10 + 7 – 2. Wartością obu tych wyrażeń jest 15. Wynik końcowy jest taki sam: obie instrukcje przypisania zapisują wartość 15 w zmiennej mielonka.

Dobra nazwa zmiennej opisuje zawarte w niej dane. Wyobraź sobie, że przeprowadzasz się do nowego mieszkania i na wszystkich kartonach piszesz słowo Rzeczy. W ten sposób nigdy niczego nie znajdziesz! W tej książce będziemy używali nazw takich jak na przykład mielonka, jajka i bekon.

Python tworzy zmienną przy jej pierwszym użyciu w instrukcji przypisania. Aby sprawdzić, jaką wartość ma zmienna, wpisz jej nazwę w powłoce interaktywnej:

>>> mielonka = 15

>>> mielonka

15

Wartością wyrażenia mielonka jest wartość zapisana w zmiennej mielonka, czyli 15.

Zmiennych można używać również w wyrażeniach. Wpisz w powłoce interaktywnej :

>>> mielonka = 15

>>> mielonka + 5

20

Wartość zmiennej mielonka jest ustawiona na 15, więc wpisanie mielonka + 5 ma taki sam skutek jak wpisanie wyrażenia 15 + 5. Oto etapy wyznaczania wartości mielonka + 5:

Nie można użyć zmiennej przed utworzeniem jej za pomocą instrukcji przypisania. Jeśli spróbujesz tak zrobić, Python odpowie błędem NameError, ponieważ nie istnieje jeszcze zmienna o tej nazwie. Błędne wpisanie nazwy zmiennej również powoduje ten błąd:

>>> mielonka = 15

>>> miolenka

Traceback (most recent call last):

File "<pyshell#8>", line 1, in <module>

miolenka

NameError: name 'miolenka' is not defined

Błąd ten pojawił się, ponieważ nie istnieje zmienna o nazwie miolenka, lecz o nazwie mielonka.

Wartość przechowywaną w zmiennej można zmienić, wpisując kolejną instrukcję przypisania. Wpisz w powłoce interaktywnej taki przykład:

>>> mielonka = 15

>>> mielonka + 5

20

>>> mielonka = 3

>>> mielonka + 5

8

Przy pierwszym wpisaniu mielonka + 5 wartością wyrażenia jest 20, ponieważ w zmiennej mielonka została zapisana wartość 15. Jednak po wpisaniu mielonka = 3, wartość 15 w pudełku zmiennej zostaje zastąpiona, czyli nadpisana (ang. overwritten) wartością 3, ponieważ zmienna może w danym momencie przechowywać tylko jedną wartość. Ponieważ wartość zmiennej mielonka to w tej chwili 3, po wpisaniu mielonka + 5 wartość wyrażenia zostanie wyznaczona na 8. Nadpisanie to wyjęcie z pudełka zmiennej starej wartości i włożenie nowej (patrz rys. 1.4).

Rysunek 1.4. Wartość 15 w zmiennej mielonka została zastąpiona wartością 3

Instrukcja przypisania mielonka = mielonka + 5 oznacza: „Nową wartością zmiennej mielonka będzie bieżąca wartość zmiennej mielonka plus 5”. Aby kilkukrotnie zwiększyć wartość zmiennej mielonka o 5, wpisz następujące wiersze w powłoce interaktywnej:

>>> mielonka = 15

>>> mielonka = mielonka + 5

>>> mielonka = mielonka + 5

>>> mielonka = mielonka + 5

>>> mielonka

30

W pierwszej instrukcji w tym przykładzie przypisujesz zmiennej mielonka wartość 15. W kolejnej instrukcji, do wartości zmiennej mielonka dodajesz 5, czyli przypisujesz zmiennej mielonka nową wartość, mielonka + 5, co daje wynik 20. Gdy zrobisz to trzy razy, wartość mielonka będzie wynosiła 30.

Do tej pory zajmowaliśmy się tylko jedną zmienną, ale możesz utworzyć tyle zmiennych, ile będziesz potrzebować w programie. Dla przykładu przypiszemy różne wartości dwóm zmiennym o nazwach jajka i bekon:

>>> bekon = 10

>>> jajka = 15

Teraz w zmiennej bekon znajduje się wartość 10, a w zmiennej jajka wartość 15. Każda zmienna to niezależne pudełko ze swoją własną wartością (patrz rys. 1.5).

Rysunek 1.5. Zmienne bekon i jajka niezależnie przechowują swoje wartości

W powłoce interaktywnej wpisz mielonka = bekon + jajka, a następnie sprawdź nową wartość zmiennej mielonka:

>>> bekon = 10

>>> jajka = 15

>>> mielonka = bekon + jajka

>>> mielonka

25

Wartość zmiennej mielonka to w tej chwili 25. Dodając do siebie zmienne bekon i jajka, dodajesz ich wartości, które wynoszą odpowiednio 10 i 15. Zmienne zawierają wartości, a nie wyrażenia, więc zmiennej mielonka przypisano wartość 25, a nie wyrażenie bekon + jajka. Po przypisaniu zmiennej mielonka wartości 25 za pomocą instrukcji mielonka = bekon + jajka, zmiana wartości bekon lub jajka nie będzie miała wpływu na zmienną mielonka.

Podsumowanie

W tym rozdziale opisano podstawy pisania poleceń w Pythonie. Ponieważ komputery nie mają zdrowego rozsądku i rozumieją tylko konkretne polecenia, musisz w Pythonie podać dokładnie, co ma być zrobione.

Wyrażenia to wartości (jak 2 lub 5) połączone z operatorami (jak + lub -). Python potrafi wyznaczyć wartość wyrażenia, czyli sprowadzić go do pojedynczej wartości. Wartości można zapisywać w zmiennych i dzięki temu program może je zapamiętywać, i później z nich korzystać.

W Pythonie występuje jeszcze kilka innych rodzajów operatorów i wartości. W kolejnym rozdziale poznasz kilka kolejnych pojęć podstawowych i napiszesz pierwszy program. Nauczysz się używać tekstu w wyrażeniach. Python nie ogranicza się do liczb – to znacznie więcej niż kalkulator!