Python - Podstawy programowania
===============================
Python jest dynamicznym jÄzykiem interpretowanym.
Interpretowany tzn. że kod, który napiszemy możemy natychmiast wykonaÄ bez
potrzeby tÅumaczenia (kompilowania) kodu programistycznego na jÄzyk maszynowy (czyli na
formÄ zrozumiaÅÄ
przez komputer).
Interpreter tÅumaczy (kompiluje w locie) nasz kod oraz natychmiast go uruchamia.
Interpreter może również byÄ używany w trybie interaktywnym do testowania ``kawaÅków``
kodu (np. IPython omawiany w kolejnych scenariuszach).
NaukÄ zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem
.. code:: bash
$ python
Po uruchomieniu interpretera komputer powinien wypisaÄ trzy linie tekstu a w czwartej tak zwany
znak zachÄty, po którym wpisujemy komendy. Standardowym znakiem zachÄty w interpreterze
Pythona jest ``>>>``.
.. note::
PrzykÅady zawierajÄ
ce znak zachÄty ``$`` oznaczajÄ
komendy
do wykonania w terminalu systemu operacyjnego (uruchom przez :kbd:`Win+T`).
Komendy należy kopiowaÄ i wklejaÄ bez znaku zachÄty ``$`` i poprzedzajÄ
cego tekstu.
Komendy można wklejaÄ do terminala Årodkowym klawiszem myszki.
ŹródÅa
--------------------
Poniższy dokument możesz pobraÄ w formacie *odt* lub *pdf*:
:download:`T1.odt `
:download:`T1.pdf `
Zmienne
-------
W interpreterze wpisz poniższy przykÅad:
.. raw:: html
Kod nr
.. code:: pycon
>>> a = 3
>>> b = 5
>>> a + b
8
>>> c = -6.5
>>> a + c
-3.5
>>> 7/2
3.5
>>> 2*6
12
>>> 2**6
64
>>> kwiatek = 'stokrotka'
>>> kwiatek2 = "róża"
>>> kwiatek + ' i ' + kwiatek2
'stokrotka i róża'
.. note::
PrzykÅady zawierajÄ
ce znaki zachÄty ``>>>`` elementy do wykonania w interpreterze
jÄzyka Python.
Komendy należy kopiowaÄ i wklejaÄ bez znaku zachÄty ``>>>``.
W powyższym przykÅadzie wykonujemy operacje na zmiennych. Zmienne sÄ
"pudeÅkami"
trzymajÄ
cymi różne informacje. Zmienna posiada swojÄ
nazwÄ i wartoÅÄ. Nazwa zmiennej w Pythonie
nie może zawieraÄ:
- polskich znaków
- cyfry na pierwszym miejscu
- spacji
- znaków specjalnych za wyjÄ
tkiem podkreÅlnikiem ( _ )
WielkoÅÄ liter jest rozróżniana (zmienna x i zmienna X to dwie różne zmienne).
PrzykÅady poprawnych:
- ``i``
- ``_chodnik``
- ``nazwa_23``
- ``a2c4``
PrzykÅady niepoprawnych:
- ``1nazwa``
- ``4_strony_Åwiata``
- ``z-myslnikiem``,
- ``nazwa ze spacja``
GÅówne typy zmiennych, którymi bÄdziemy siÄ zajmowaÄ to:
- liczby caÅkowite (integer)
- liczby zmiennoprzecinkowe (float)
- napisy, czyli tzw. ÅaÅcuchy znaków (string)
Istnieje wiele innych typów zmiennych. [odniesienie do zewn. ŹródeÅ]
Zróbmy proste zadanie - bÄdÄ
c w interpreterze wykonaj:
.. raw:: html
Kod nr
.. code-block:: python
zmienna1 = raw_input(``Podaj imiÄ: ``)
print(``Witaj``, zmienna1)
StworzyliÅmy wÅaÅnie pierwszy program w jÄzyku Python. Gratulacje!
Przy użyciu funkcji ``raw_input`` pobiera on do zmiennej to, co użytkownik wpisze z klawiatury a
nastÄpnie używajÄ
c funkcji ``print`` wyÅwietla na ekranie kawaÅek tekstu oraz zawartoÅÄ wczeÅniej
utworzonej zmiennej.
.. warning::::
Funkcja ``raw_input`` zwraca zmiennÄ
typu napisowego (string). Nawet, gdy podamy
liczbÄ, to bÄdzie ona traktowana jak napis i nie można wykonywaÄ na niej dziaÅaÅ matematycznych.
Aby zamieniÄ podanÄ
z klawiatury liczbÄ na zmiennÄ
liczbowÄ
(int lub float) musimy skorzystaÄ z
funkcji ``int``.
.. raw:: html
Kod nr
.. code-block:: python
zmienna1 = raw_input("Podaj 1 liczbÄ: ")
zmienna2 = raw_input("Podaj 2 liczbÄ: ")
wynik = int(zmienna1) + int(zmienna2)
print("Suma:", wynik)
.. tip::
Grupy mniej zaawansowane mogÄ
poÅwiÄciÄ czas na eksperymenty z operacjami na zmiennych podawanych z klawiatury.
Funkcje
^^^^^^^
Funkcje sÄ
to wczeÅniej zdefiniowane kawaÅki kodu, których możemy później użyÄ do wykonania
okreÅlonej czynnoÅci, zamiast wpisywaÄ ten sam kod po raz kolejny.
W okrÄ
gÅych nawiasach po nazwach funkcji umieszczamy parametry lub argumenty funkcji (może byÄ
ich wiÄcej niż jeden). Parametry i argumenty oddzielamy od siebie przecinkami.
Jak widaÄ na przykÅadzie funkcji ``raw_input`` niektóre funkcje pozostawiajÄ
``coÅ`` po sobie. W
tym przypadku funkcja ``raw_input`` pozostawia po sobie to, co użytkownik wpisaŠz klawiatury a
my wrzucamy to do naszej zmiennej ``zmienna1``. Kiedy funkcja pozostawia po sobie jakieÅ dane,
mówimy, że funkcja zwraca dane.
Kolejny program zapiszemy już w pliku aby proÅciej byÅo go zmieniaÄ oraz wykonywaÄ wiele razy.
W tym celu należy otworzyÄ edytor tekstu, wpisaÄ do niego instrukcje jÄzyka Python, a nastÄpnie
zapisaÄ z rozszerzeniem ``.py``. Aby uruchomiÄ tak zapisany program należy bÄdÄ
c w linii poleceÅ
(konsola / terminal) w tym samym katalogu gdzie zapisaliÅmy nasz plik wpisaÄ:
.. code-block:: bash
$python nazwa-pliku.py
Wyrażenia warunkowe
-------------------
Do podejmowania decyzji w programowaniu sÅuży instrukcja warunkowa ``if``.
Blok kodu podany po instrukcji if zostanie wykonany wtedy, gdy wyrażenie warunkowe bÄdzie
prawdziwe. W przeciwnym przypadku blok kodu zostanie zignorowany.
CzÄÅÄ ``else`` jest przydatna, jeÅli chcemy, żeby nasz program sprawdziÅ wyrażenie warunkowe i
wykonaÅ blok kodu jeÅli wyrażenie warunkowe jest prawdziwe lub wykonaÅ inny blok kodu jeÅli
wyrażenie warunkowe byÅo faÅszywe.
Python pozwala także na sprawdzenie wiÄkszej liczby warunków w ramach jednej instrukcji ``if``. SÅuży
do tego instrukcja ``elif`` (skrót od else if).
.. code-block:: python
if wyrażenie_warunkowe:
blok kodu 1
elif:
blok kodu 2
else:
blok kodu 3
Wszystkie instrukcje w bloku kodu muszÄ
byÄ wciÄte wzglÄdem instrukcji ``if``. W ten sposób Python
rozpoznaje, które instrukcje ma wykonaÄ po sprawdzeniu prawdziwoÅci wyrażenia. Tak samo po
instrukcjach ``elif`` i ``else`` musimy wstawiÄ dwukropek a instrukcje muszÄ
byÄ wciÄte.
GÅÄbokoÅÄ wciÄcia nie ma znaczenia (dobry zwyczaj programowania w Pythonie mówi, żeby używaÄ
czterech spacji) ale musi byÄ ono w caÅym programie zawsze tej samej gÅÄbokoÅci.
Pobawmy siÄ instrukcjami ``if``, ``elif`` i ``else`` na prostym przykÅadzie.
.. raw:: html
Kod nr
.. code-block:: python
zmienna = raw_input('Podaj liczbÄ: ')
zmienna = int(zmienna)
if zmienna > 0:
print('WpisaÅeÅ liczbÄ dodatniÄ
')
elif zmienna == 0:
print('WpisaÅeÅ zero')
else:
print('WpisaÅeÅ liczbÄ ujemnÄ
')
print('Koniec programu')
W programie na poczÄ
tku wczytywana jest wartoÅÄ z klawiatury do zmiennej, a nastÄpnie
dokonujemy zmiany jej typu na liczbÄ caÅkowitÄ
. W dalszej czÄÅci stosujemy instrukcjÄ ``if``
sprawdzajÄ
c czy wartoÅÄ podanej liczby jest wiÄksza od 0. JeÅli wartoÅÄ bÄdzie wiÄksza od 0 na
ekranie wyÅwietlony bÄdzie napis ``WpisaÅeÅ liczbÄ dodatniÄ
``, jeÅli nie, program wykona kolejnÄ
instrukcjÄ: ``elif`` sprawdzajÄ
c czy liczba jest równa 0. JeÅli żaden z powyższych warunków nie
bÄdzie speÅniony wykonane zostanie polecenie zawarte po instrukcji ``else``. Program zakoÅczy siÄ
wyÅwietlajÄ
c: ``Koniec programu``.
Jak również widaÄ porównanie w Pythonie, wykonujemy poprzez podwójne użycie znaku
równoÅci: ``==``. Matematyczne wyrażenie ``nie równe`` (â ) w Pythonie zapisujemy jako ``!=``.
Gra w "zgadnij liczbÄ"
----------------------
Napisz program, w którym:
- do zmiennej ``dana`` przypiszesz pewnÄ
liczbÄ
- użytkownik bÄdzie mógÅ podaÄ z klawiatury dowolnÄ
liczbÄ caÅkowitÄ
- jeżeli użytkownik trafi program wyÅwietli komunikat: ``Gratulacje!``, a jeÅli nie, to wyÅwietli
napis okreÅlajÄ
cy czy podana liczba jest wiÄksza od danej czy mniejsza.
.. raw:: html
Kod nr
.. code-block:: python
dana = 18
strzal = int(raw_input("Wpisz liczbÄ caÅkowitÄ
"))
if strzal == dana:
print("Gratulacje! ZgadÅeÅ")
elif strzal < dana:
print("Nie! Szukana liczba jest wiÄksza!")
else:
print("Nie! Szukana liczba jest mniejsza!")
print("Koniec programu.")
Zadania dodatkowe
-----------------
#. Za pomocÄ
poznanych narzÄdzi stwórz program bÄdÄ
cy kalkulatorem.
#. Napisz program rozwiÄ
zujÄ
cy równania kwadratowe (:ref:`kwadratowe`).
#. Napisz program, który spyta użytkownika ile ma lat, a nastÄpnie wyÅwietli czy osoba ta jest
mÅodzieżÄ
, dzieckiem czy dorosÅym (zaÅóżmy, że dziecko ma mniej niż 12 lat, a dorosÅy wiÄcej
niż 18).
#. Napisz program, który bÄdzie sortowaÅ trzy podane przez użytkownika liczby.
#. Napisz program, który w odpowiedzi na podanÄ
przez użytkownika liczbÄ bÄdzie wyÅwietlaÅ
komunikat czy jest to liczba parzysta, czy nieparzysta.
#. Napisz program, który bÄdzie sprawdzaÅ czy z podanych przez użytkownika trzech dÅugoÅci
można zbudowaÄ trójkÄ
t.
.. _kwadratowe:
PrzykÅad równania kwadratowego
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. raw:: html
Kod nr
.. code-block:: python
:linenos:
print 'Dla równania kwadratowego ax2+bx+c=0'
a=int(raw_input('podaj wartoÅÄ parametru a: '))
b=int(raw_input('podaj wartoÅÄ parametru b: '))
c=int(raw_input('podaj wartoÅÄ parametru c: '))
delta = b**2-4*a*c
if delta > 0:
x1 = (-b-delta**(1/2))/(2*a)
x2 = (-b+delta**(1/2))/(2*a)
print 'x1 = ', x1, ', x2= ', x2
elif delta == 0:
x0 = -b/(2*a)
print 'x0 = ', x0
else:
print 'brak rozwiÄ
zaÅ'
PÄtla WHILE
-----------
PÄtla while sÅuży do konstrukcji bloku instrukcji, które bÄdÄ
wykonywane warunkowo. W programie
najpierw bÄdzie sprawdzane czy warunek jest speÅniony â jeÅli tak, to wykonane bÄdÄ
wszystkie
instrukcje zawarte w bloku. NastÄpnie ponownie sprawdzany jest warunek, jeÅli nadal jest speÅniony
to ponownie wykonuje wszystkie polecenia. PÄtla jest wykonywana tak dÅugo, jak dÅugo warunek jest
prawdziwy.
.. code-block:: python
while wyrażenie_warunkowe:
blok kodu
Zobaczmy dziaÅanie pÄtli ``while`` na poniższym przykÅadzie.
.. raw:: html
Kod nr
.. code-block:: python
:linenos:
import random
dana = random.choice(range(10))
kontynuuj = True
while koniec:
strzal = int(raw_input("Wpisz liczbÄ caÅkowitÄ
"))
if strzal == dana:
print("Gratulacje! ZgadÅeÅ")
kontynuuj = False
elif strzal < dana:
print("Nie! Szukana liczba jest wiÄksza!")
else:
print("Nie! Szukana liczba jest mniejsza!")
print("Koniec programu.")
Program bÄdzie wykonywany do momentu, w którym użytkownik poda wÅaÅciwÄ
liczbÄ. Zatem nie
trzeba do każdego strzaÅu ponownie uruchamiaÄ programu. Zmienna ``kontynuuj`` ma ustawionÄ
wartoÅÄ logicznÄ
``True`` (z angielskiego prawda). W momencie, w którym użytkownik poda wÅaÅciwÄ
liczbÄ zmienna przyjmie wartoÅÄ logicznÄ
``False`` (z angielskiego faÅsz), co spowoduje zakoÅczenie
wykonywania pÄtli while.
Wyrażenia break i continue
--------------------------
Wyrażenie ``break`` powoduje natychmiastowe zakoÅczenie wykonywania pÄtli.
.. raw:: html
Kod nr
.. code-block:: python
:linenos:
import random
dana = random.choice(range(10))
while True:
strzal = int(raw_input("Wpisz liczbÄ caÅkowitÄ
"))
if strzal == dana:
print("Gratulacje! ZgadÅeÅ")
break
elif strzal < dana:
print("Nie! Szukana liczba jest wiÄksza!")
else:
print("Nie! Szukana liczba jest mniejsza!")
print("Koniec programu.")
Wyrażenie ``continue`` powoduje ominiÄcie nastÄpujÄ
cych po nim wyrażeÅ w bloku, a nastÄpnie
rozpoczyna ponowne wykonanie pÄtli.
.. raw:: html
Kod nr
.. code-block:: python
:linenos:
import random
dana = random.choice(range(10))
while True:
strzal = int(raw_input("Wpisz liczbÄ caÅkowitÄ
"))
if strzal > dana:
print("Nie! Szukana liczba jest mniejsza!")
continue
elif strzal < dana:
print("Nie! Szukana liczba jest wiÄksza!")
continue
print("Gratulacje! ZgadÅeÅ")
break
print("Koniec programu.")
Zadania dodatkowe
^^^^^^^^^^^^^^^^^
1. Napisz program, który sumuje liczby dodatnie podawane przez użytkownika â pÄtla pozwala
użytkownikowi podawaÄ liczby dopóki nie poda liczby niedodatniej.
NastÄpnie obok podawanego wyniku bÄdzie wyÅwietlana liczba okreÅlajÄ
ca iloÅÄ podanych
liczb.
2. Na podstawie wczeÅniejszego zadania napisz program obliczajÄ
cy ÅredniÄ
liczb dodatnich, a
nastÄpnie zmodyfikuj go tak, aby obliczana byÅa Årednia również dla liczb ujemnych.
PÄtla FOR
---------
PÄtla for sÅuży do wykonywania tego samego bloku operacji dla każdego elementu z pewnej listy.
IloÅÄ wykonaÅ tego bloku jest równa liczbie elementów tej listy. WywoÅywana w pÄtli zmienna
przyjmuje po kolei wartoÅci każdego z elementów.
PrzykÅady list:
- lista liczb wpisanych rÄcznie â elementy podane w nawiasach kwadratowych
.. code-block:: python
[2,3,4,5]
- funkcja range â wywoÅa kolejno liczby naturalne zaczynajÄ
c od podanej w nawiasie na
pierwszym miejscu, koÅczÄ
c na liczbie mniejszej o 1 od liczby na miejscu drugim
.. code-block:: python
range(2,6)
Zobrazujmy dziaÅanie pÄtli ``for`` na prostym przykÅadzie, wymieniajÄ
cym kolejno elementy z pewnej
listy.
.. raw:: html
Kod nr
.. code-block:: python
print("Mamy listÄ elementów: ", [5,6,7,8])
for liczba in [5,6,7,8]:
print("element listy: ", liczba)
Zadania dodatkowe
^^^^^^^^^^^^^^^^^
1. Napisz dwa programy, które wypisujÄ
liczby naturalne od 1 do 15. W pierwszym programie
wykonaj pÄtlÄ for, a w drugim while.
2. Zmodyfikuj powyższe zadanie, tak aby programy obliczaÅy sumÄ liczb od 1 do 15.
3. Za pomocÄ
pÄtli for, napisz program, który oblicza silniÄ liczby podanej przez użytkownika.
4. Oblicz sumÄ kwadratów liczb naturalnych z zakresu od 1 do 100.
SÅowniczek
----------
.. glossary::
JÄzyk interpretowany
jÄzyk, który jest tÅumaczony i wykonywany "w locie". TÅumaczeniem i
wykonywaniem programu zajmuje siÄ specjalny program nazwany interpreterem jÄzyka.
Interpreter
program, który zajmuje siÄ tÅumaczeniem kodu jÄzyka programowania na jÄzyk
maszynowy i jego wykonywaniem.
Zmienne
symbole zdefiniowane i nazwane przez programistÄ, które sÅużÄ
do
przechowywania wartoÅci, obliczeÅ na nich i odwoÅywanie siÄ do wartoÅci przez zdefiniowanÄ
nazwÄ.
Funkcje
fragmenty kodu zamkniÄte w okreÅlonym przez programistÄ symbolu, mogÄ
ce
przyjmowaÄ parametry oraz mogÄ
ce zwracaÄ wartoÅci. UmożliwiajÄ
wielokrotne wywoÅywanie tego
samego kodu, bez koniecznoÅci jego przepisywania za każdym razem, gdy zajdzie potrzeba jego
wykonania.
Typ zmiennych
rodzaj danych, który przypisany jest do zmiennej w momencie jej tworzenia.
Metryka
^^^^^^^
:Autorzy: Dorota Rybicka, Grzegorz Wilczek
:Utworzony: |date| o |time|
.. |date| date::
.. |time| date:: %H:%M
.. raw:: html