2        LEKCJA 2 -  PODSTAWY PYTHONA

2.1       Uruchamianie Pythona w systemie Windows

Jeżeli Python został prawidłowo zainstalowany, aby uruchomić interpreter w trybie interaktywnym, klikamy przycisk "Start", dalej "Programy" ("Wszystkie Programy" w XP), wybieramy folder "Python 2.4", i na koniec "IDLE (Python GUI)". W oknie, które po chwili się pojawi, powinniśmy zobaczyć następujący tekst:

 

Python 2.4 (#60, Nov 30 2004, 11:49:19) [MSC v.1310 32 bit (Intel)] on win32

Type "copyright", "credits" or "license()" for more information.

 

    ****************************************************************

    Personal firewall software may warn about the connection IDLE

    makes to its subprocess using this computer's internal loopback

    interface.  This connection is not visible on any external

    interface and no data is sent to or received from the Internet.

    ****************************************************************

   

IDLE 1.1     

>>> 

 

Radzę tak zmniejszyć wielkość okienka IDLE, by widzieć zawartość niniejszego dokumentu bez potrzeby przełączania się między okienkami.

2.2       Zalecana Konfiguracja Pythona

Przy pierwszym uruchomieniu Pythona, upewnijmy się że włączona jest funkcja automatycznego zapisu programów, oraz że IDLE koduje polskie znaki we właściwy sposób.

Z menu Options wybierzmy Configure IDLE..., kliknijmy zakładkę General, a następnie:

-        ustawmy Autosave Preference At Start of Run (druga opcja od góry) na No Prompt

-        ustawmy Default Source Encoding (przedostatnia opcja) na Locale-defined

-        kliknijmy przycisk OK, aby zapamiętać zmiany.

 

2.3       Korzystanie z pomocy On-Line

Zanim przejdziemy dalej, powinniśmy wiedzieć, gdzie w razie czego szukać pomocy.

Poprzez kliknięcie na menu Help uzyskujemy dostęp do pomocy na temat środowiska programistycznego IDLE (IDLE Help) oraz pomocy na temat języka Python (Python Docs F1).

Pomoc na temat IDLE warto przejrzeć przy pierwszym z nim kontakcie, by zyskać ogólny ogląd o jego możliwościach. Na szukanie odpowiedzi na konkretne pytania, przyjdzie czas, gdy takowe się pojawią.

Podobnie z pomocą na temat Pythona: najważniejsze by wiedzieć gdzie szukać informacji. Strona główna dokumentacji Pythona zawiera odnośniki do poszczególnych jej sekcji. Szczególnie interesującą sekcją dla początkującego programisty Pythona jest "Tutorial", zawierający wprowadzenie do tego języka oraz opis najważniejszych jego konstrukcji. Opis wszystkich elementów języka Python znajdziemy w sekcji "Language Reference", natomiast opis funkcji dołączanych ze standardowych bibliotek w sekcji "Library Reference".

2.4       Tryb interaktywny Pythona

Widoczny po uruchomieniu trybu interaktywnego Pythona znak zachęty ">>>" oznacza gotowość interpretera do wykonywania naszych poleceń.

Aby sprawdzić czy interakcja rzeczywiście działa, wpiszmy "credits" i wciśnijmy klawisz Enter; po chwili powinniśmy zobaczyć:

 

>>> credits

Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands for supporting Python development.  See www.python.org for more information.

>>> 

2.5       Liczby i operatory arytmetyczne

Tryb interaktywny Pythona może być używany jako kalkulator. Wpiszmy:

 

>>> 2+2

 

aby dodać dwie dwójki. Powinniśmy otrzymać następujący wynik:

 

4

>>> 

 

Poniżej wypróbujemy pozostałe trzy podstawowe operatory matematyczne - odejmowanie, mnożenie i dzielenie:

 

>>> 4-1

3

>>> 2*3

6

>>> 4/2

2

>>> 

 

Próba dzielenia przez zero kończy się w Pythonie wyświetleniem komunikatu o błędzie:

 

>>> 2/0

 

Traceback (most recent call last):

  File "<pyshell#6>", line 1, in -toplevel-

    2/0

ZeroDivisionError: integer division or modulo by zero

>>> 

 

Dodatkowe dwa operatory arytmetyczne dostępne w Pythonie to potęgowanie:

 

>>> 3**2

9

>>> 

 

oraz reszta z dzielenia:

 

>>> 8%3

2

>>> 

 

Pojedyncze wyrażenie może zawierać wiele operatorów. Są one wykonywane w kolejności znanej z algebry:

 

>>> 2+4/2

4

>>> 25+2*-3**3+12/3

-25

>>> 

 

W przypadku konieczności zmiany kolejności wykonywania operatorów używamy nawiasów okrągłych:

 

>>> (3+5)/2

4

>>> -((2+1)*(8-3))**2

-225

>>> 

2.6       Systemy liczbowe

Liczby całkowite mogą być w Pythonie zapisywane w systemach pozycyjnych innych niż dziesiętny: ósemkowym i szesnastkowym.

Liczbę w systemie ósemkowym zapisujemy poprzedzając jej wartość znakiem zera (interpreter Pythona zwraca tą samą wartość zapisaną dziesiętnie):

 

>>> 011

9

>>> 0764

500

>>> 

 

Liczbę w systemie szesnastkowym zapisujemy poprzedzając jej wartość dwuznakiem "0x":

 

>>> 0X100

256

>>> 0xabc

2748

>>> 0xBADF00D

195948557

>>> 

2.7       Typy liczb

Obok liczb całkowitych w Pythonie są dostępne trzy inne typy liczbowe:

-        długie liczby całkowite,

-        liczby rzeczywiste,

-        liczby zespolone.

2.8       Długie liczby całkowite

Liczby całkowite mają rozmiar 32 bitów, stąd największą wartością jaką mogą przyjąć jest 2147483647. Większe wartości zapamiętywane są jako długie liczby całkowite, rozpoznajemy je po umieszczonej na końcu literze "L":

 

>>> 99999999999999999

99999999999999999L

>>> 

 

Wartość mniejszą niż 2147483647 możemy oznaczyć jako długą sami dostawiając literę "L":

 

>>> 7l

7L

>>> 0xDEADF00L

233496320L

>>> 

 

Jeżeli w wyrażeniu występuje choć jedna długa liczba całkowita, również rezultat jest długą liczbą całkowitą:

 

>>> 2+4*5L

22L

>>> 

2.9       Liczby rzeczywiste

Liczby rzeczywiste mogą być w Pythonie przedstawione w formie ułamka dziesiętnego (z separatorem w postaci kropki, nie przecinka!):

 

>>> 2.5

2.5

>>> 

 

lub w notacji naukowej (mantysa"E"+-wykładnik):

 

>>> 1e+3

1000.0

>>> 

 

Wartość całkowitą możemy oznaczyć jako liczbę rzeczywistą dostawiając na końcu ".0". Porównajmy:

 

>>> 3/2

1

>>> 3.0/2.0

1.5

>>> 

 

Aby odrzucić z wyniku dzielenia część ułamkową należy użyć podwójnego znaku dzielenia:

 

>>> 3.0//2.0

1.0

>>> 

 

Jak widać, jeżeli w wyrażeniu występuje choć jedna liczba rzeczywista, również rezultat jest liczbą rzeczywistą. Jeszcze jeden przykład na to:

 

>>> 1.5e+1+5000000000L*3

15000000015.0

>>> 

2.10   Liczby zespolone

Liczby zespolone są w Pythonie zapisywane jako suma części rzeczywistej i części urojonej (w celu prawidłowego wykonywania operacji arytmetycznych, najlepiej by suma była ujęta w nawiasy okrągłe);  część urojona oznaczana jest przez dostawioną na jej końcu literę "J":

 

>>> -1+1j

(-1+1j)

>>> 0.5+0.5j

(0.5+0.5j)

>>> 

 

Jeżeli w wyrażeniu występuje choć jedna liczba urojona, rezultat jest liczbą zespoloną:

 

>>> 1j**2

(-1+0j)

>>> 6.8*200L/(1+2j)

(272-544j)

>>>

2.11   Tworzenie i zmiana wartości zmiennych

Python pozwala używać zmiennych w celu przechowywania wartości dowolnego typu.

Utworzenie zmiennej polega na nadaniu jej początkowej wartości. Poniżej utworzymy zmienną a, nadając jej wartość 4:

 

>>> a=4

>>> 

 

Sprawdźmy, czy a rzeczywiście równe jest cztery:

 

>>> a

4

>>> 

 

Stwórzmy nową zmienną:

 

>>> b=5

>>> 

 

Aby wykonać dwa polecenia Pythona w jednym wierszu rozdzielamy je średnikiem. Sprawdźmy wartości obu zmiennych:

 

>>> a;b

4

5

>>> 

 

W każdej chwili możemy zmienić wartość zmiennej:

 

>>> a=7

>>> a

7

>>> 

 

Do zmiennej możemy podstawić wartość innej zmiennej:

 

>>> a=b

>>> a;b

5

5

>>> b=3

>>> a;b

5

3

>>> 

 

lub dowolnie skomplikowane wyrażenie:

 

>>> c=1+17*(32/8)

>>> d=(a*b)/(a+b+2.0)

>>> c;d

69

1.5

>>> 

 

Jak widać, zmienna przyjmuje wartość typu rzeczywistego tylko wtedy, gdy wyrażenie, które do niej podstawiono było takiego typu (czyli zawierało przynajmniej jedną liczbę rzeczywistą - w powyższym przypadku 2.0).

Nowa wartość zmiennej może być wyliczona o dotychczasową wartość jej samej:

 

>>> a=a+7

>>> b=b-3

>>> c=c*2

>>> d=d/3

>>> a;b;c;d

12

0

138

0.5

>>> 

 

Operację zmiany wartości zmiennej z wykorzystaniem jej dotychczasowej wartości można zapisać prościej, łącząc odpowiedni operator arytmetyczny ze znakiem równości:

 

>>> a+=2

>>> b-=2

>>> c*=2

>>> d/=2

>>> a;b;c;d

14

-2

276

0.25

>>> 

 

Próba użycia zmiennej, której wcześniej nie nadano żadnej wartości, kończy się wyświetleniem komunikatu o błędzie:

 

>>> e

 

Traceback (most recent call last):

  File "<pyshell#30>", line 1, in -toplevel-

    e

NameError: name 'e' is not defined

>>> 

 

Istniejącą zmienną można skasować instrukcją "del":

 

>>> del a

>>> a

 

Traceback (most recent call last):

  File "<pyshell#32>", line 1, in -toplevel-

    a

NameError: name 'a' is not defined

>>> 

 

a potem stworzyć od nowa:

 

>>> a=71.0

>>> a

71.0

>>> 

2.12   Zasady nazywania zmiennych

Nazwy zmiennych w Pythonie mogą być dowolnie długie:

 

>>> NieprawdopodobnieOkrutnieDlugaNazwaZupelnieNiewaznejZmiennej=1234

>>> NieprawdopodobnieOkrutnieDlugaNazwaZupelnieNiewaznejZmiennej*2

2468

>>> 

 

i mogą zawierać zarówno małe, jak i duże litery alfabetu, tak łacińskiego, jak i polskiego. Takie same nazwy, ale napisane małymi bądź dużymi literami, oznaczają różne zmienne:

 

>>> aa=1

>>> Aa=2

>>> aA=3

>>> AA=4

>>> aa;Aa;aA;AA

1

2

3

4

>>> 

 

Zmiennym nie można nadawać nazw zastrzeżonych dla instrukcji języka Python:

 

and       del       for       is        raise   

assert    elif      from      lambda    return  

break     else      global    not       try     

class     except    if        or        while   

continue  exec      import    pass      yield   

def       finally   in        print

 

Próba użycia któregoś z powyższych słów kluczowych jako nazwy zmiennej, kończy się wyświetleniem komunikatu o błędzie:

 

>>> del=1

SyntaxError: invalid syntax

>>> 

 

Nazwy nie mogą zawierać spacji:

 

>>> dwie nazwy=1

SyntaxError: invalid syntax

>>> 

 

Mogą jednak zawierać znak podkreślenia:

 

>>> jedna_nazwa=2

>>> jedna_nazwa

2

>>> 

 

Nazwy zmiennych mogą także zawierać cyfry:

 

>>> odpowiedz_nr_234=7

>>> odpowiedz_nr_234

7

>>> 

 

Cyfry jednak nie mogą rozpoczynać nazwy zmiennej:

 

>>> 7mil=12

SyntaxError: invalid syntax

>>> 

 

Znak podkreślenia może rozpoczynać nazwę zmiennej:

 

>>> _a=1

>>> _a

1

>>> 

 

Jednak nie powinno się go w tym miejscu używać bez przemyślenia, gdyż w języku Python nazwy zaczynające się od "_" mają specjalne znaczenie - patrz dokumentacja punkty 6.12, 3.3 i 5.2.1.

Ponadto, sam znak podkreślenia zwraca w trybie interaktywnym (tylko w tym trybie!) wartość ostatniego obliczonego wyrażenia:

 

>>> 7+3*2

13

>>> _

13

>>> 

2.13   Napisy

Innym niż liczby rodzajem danych, którymi możemy posługiwać się w Pythonie są napisy.

Napisy ograniczamy cudzysłowami bądź apostrofami.

Jeżeli początek napisu oznaczyliśmy cudzysłowem, to tak samo powinniśmy go zakończyć:

 

>>> "napis"

'napis'

>>> 

 

Jeżeli początek napisu oznaczyliśmy apostrofem, to tak samo powinniśmy go zakończyć:

 

>>> 'inny napis'

'inny napis'

>>> 

 

W napisach ograniczonych cudzysłowami możemy używać apostrofów:

 

>>> "I can't help"

"I can't help"

>>> 

 

W napisach ograniczonych apostrofami możemy używać cudzysłowów:

 

>>> '"Moby Dick" is thick'

'"Moby Dick" is thick'

>>> 

 

Napisy ograniczone pojedynczymi cudzysłowami bądź apostrofami muszą kończyć się przed końcem linii:

 

>>> "napis bez końca

SyntaxError: EOL while scanning single-quoted string

>>> 

 

Napisy mogą ciągnąć się przez wiele linii jeżeli ograniczymy je potrójnymi cudzysłowami:

 

>>> """Ten napis

ma

wiele

linii"""

'Ten napis\nma\nwiele\nlinii'

>>> 

2.14   Podstawowe operacje na napisach

Napisy możemy podstawiać do zmiennych tak samo jak liczby:

 

>>> p="pies"

>>> k="kot"

>>> p

'pies'

>>> k

'kot'

>>> 

 

Na napisach możemy wykonywać dwie podstawowe operacje - łączenie:

 

>>> p+k

'pieskot'

>>> 

 

i powielanie:

 

>>> p*3

'piespiespies'

>>> 

 

możemy je również łączyć:

 

>>> 2*k+" "+p

'kotkot pies'

>>> 

2.15   Konwersja liczb na napisy

Aby skonwertować liczbę na napis posługujemy się odwróconym apostrofem (klawisz nad tabulatorem):

 

>>> a=2

>>> b=5

>>> "A="+`a`

'A=2'

>>> "B="+`b`

'B=5'

>>> `a`+`b`

'25'

>>> 

2.16   Konwersja napisów na liczby

Jeżeli liczby przechowywane są w postaci napisów:

 

>>> x="1"

>>> y="2"

>>> x;y

'1'

'2'

>>> 

 

to operacje na nich będą działały tak jak na napisach, a nie jak na liczbach:

 

>>> x+y

'12'

>>> 

 

Aby móc wykonać na nich operacje arytmetyczne należy najpierw skonwertować napisy na liczby. Służy do tego jedna z czterech funkcji:

 

>>> int(x)

1

>>> long(x)

1L

>>> float(x)

1.0

>>> complex(x)

(1+0j)

>>> 

 

A zatem

 

>>> int(x)+int(y)

3

>>> 

2.17   Ćwiczenia kontrolne

 

I.                 Wiedząc, że pierwiastek n-tego stopnia z x równa się x do potęgi 1/n i wykorzystując wiedzę o użyciu liczb zespolonych w Pythonie, wylicz wartość pierwiastka drugiego stopnia z liczby -17.

II.               Używając instrukcji Pythona oblicz resztę z dzielenia 17 przez 7 i zapamiętaj wynik w zmiennej o nazwie Z. Następnie, pojedynczym poleceniem Pythona i bez użycia nawiasów, przemnóż zmienną Z przez Z+3.

III.             Spowoduj pojedynczym poleceniem Pythona, by na ekranie 20-krotnie wyświetliła się wartość wyrażenia 1.2e+3+34.5 każdorazowo rozdzielona średnikiem.