Instrukcje
Instrukcja warunkowa
We wszystkich językach podstawą programowania są instrukcje warunkowe oraz pętle. W Pythonie ich składnia nie odbiega od standardów. Posiada ona następującą budowę:
if warunek: instrukcja 1.1 instrukcja 1.2 ... elif warunek: instrukcja 2.1 instrukcja 2.2 ... elif warunek: instrukcja 3.1 instrukcja 3.2 ... else: instrukcja 3.1 instrukcja 3.2 ...
Instrukcja warunkowa umożliwia wykonanie innych instrukcji tylko wtedy gdy warunek je poprzedzający jest prawdą. Programy używające jej wyglądają następująco:
a=7
if a>0:
print('a jest dodatnie')
|
a=7
b=-5
if (a<0 and b<0):
print('a i b ujemne')
elif (a<0 and b>0):
print('a ujemne i b dodatnie')
elif (a>0 and b<0):
print('a dodatnie i b ujemne')
elif (a>0 and b>0):
print('a i b dodatnie')
|
a=7
b=-5
if a<0:
print('a ujemne')
elif a>0:
print('a dodatnie')
else:
print('a=0')
|
>>>
a jest dodatnie
|
>>>
a dodatnie i b ujemne
|
>>>
a dodatnie
|
Wynikiem działania programu są odpowiednie komunikaty.
Złożone warunki pisane po if lub elif muszą być napisane w nawiasie.
Przy pisaniu instrukcji w ‘Pythonie’ istotną rolę odgrywają wcięcia kodu (spacje na początku linijki) i ich brak. Nawet prosta instrukcja przypisania: ‘a=7’ nie będzie wykonana, gdy przed a znajdzie się spacja. Z drugiej strony przy pisaniu instrukcji wielolinijkowych, linijka która bezpośrednio wykorzystuje wynik instrukcji wyższej musi być zaopatrzona w co najmniej jedną spację więcej. W następujących programach oba kody pracują tak samo:
a=7
b='kłam'
if b=='kłam':
if a<0: print('a jest dodatnie')
elif a>0: print('a jest ujemne')
else:
if a<0: print('a jest ujemne')
elif a>0: print('a jest dodatnie')
|
a=7
b='kłam'
if b=='kłam':
if a<0:
print('a jest dodatnie')
elif a>0:
print('a jest ujemne')
else:
if a<0:
print('a jest ujemne')
elif a>0:
print('a jest dodatnie')
|
>>>
a jest ujemne
|
>>>
a jest ujemne
|
IDLE Pythona oraz Thonny proponują głębsze wcięcia kodu złożone z 4 spacji. Nie jest to obowiązkowe.
Przy jednolinijkowych instrukcjach można je napisać w tej samej linijce co ‘if warunek:’, ‘elif warunek:’ albo ‘else:’. Nie mogą to jednak być kolejne instrukcje warunkowe. Kod napisany w drugim programie jest dopuszczalny, ale próba napisania “if b==”kłam”: if…” kończy się komunikatem o błędzie.
Instrukcja warunkowa z elif działa tak, jak instrukcja wyboru znana z innych języków programowania. Oznacza to, że sprawdzane są wszystkie warunki, a dopiero potem dochodzi do wykonania instrukcji. Ma to znaczenie gdy instrukcje zmieniają zmienne występujące w warunkach.
a=7
if a>0:
a=a-10
elif a<0:
a=a+10
else:
a=1
print(a)
|
>>>
a=-3
|
Wynik -3 wskazuje, że pierwsza instrukcja nie wpłynęła na odczyt wartości a warunku po elif.
Wcięcia kodu są wskazówką dla IDLE Pythona, kiedy ma się zacząć wykonywać kilkulinijkowa instrukcja. Trzeba w tym celu kilkakrotnie nacisnąć klawisz enter. W Thonny zawsze uruchamiany jest jakiś skrypt, zatem takie kilkakrotne naciskanie enter nie jest potrzebne.
Instrukcja iteracyjna for
Instrukcje iteracyjne występują we wszystkich językach programowania i są bardzo często używane. Jej składnia w Pythonie wygląda następująco:
for 'iterator' in 'lista' instrukcja 1 instrukcja 2 ... break continue
Opcje break i continue bardzo rzadko wykonywane są podczas iteracji. Nie są obowiązkowe.
W programach iteracja wygląda następująco:
for i in [2,3,5,7,11,13]:
print(i,' jest liczba pierwszą')
|
for i in range(6):
if i % 2 == 0:
print(i,' jest liczba parzystą')
else:
print(i,' jest liczba nieparzystą')
|
for i in range(5,10):
sum_il=0
for j in [4,7,11]:
sum_il=sum_il+i*j
print(sum_il)
|
>>>
2 jest liczba pierwszą
3 jest liczba pierwszą
5 jest liczba pierwszą
7 jest liczba pierwszą
11 jest liczba pierwszą
13 jest liczba pierwszą
|
>>>
0 jest liczba parzystą
1 jest liczba nieparzystą
2 jest liczba parzystą
3 jest liczba nieparzystą
4 jest liczba parzystą
5 jest liczba nieparzystą
|
>>>
110
132
154
176
198
|
Instrukcja for to najlepszy sposób, by za pomocą jednej instrukcji print() wyświetlić wiele wyników.
Instrukcja for także jest wrażliwa na wcięcia. Wystarczy porównać wyniki następujących programów:
for i in range(5,8):
sum_il=0
for j in [4,7,11]:
sum_il=sum_il+i*j
print(sum_il)
|
for i in range(5,8):
sum_il=0
for j in [4,7,11]:
sum_il=sum_il+i*j
print(sum_il)
|
for i in range(5,8):
sum_il=0
for j in [4,7,11]:
sum_il=sum_il+i*j
print(sum_il)
|
>>>
110
132
154
|
>>>
154
|
>>>
20
55
110
24
66
132
28
77
154
|
Pierwszy z programów daje 3 wyniki, drugi 1 wynik, trzeci 9 wyników.
Kiedy iteracja z jakiś powodów powinna zostać przerwana przed uzyskaniem przez iterator końcowego wyniku można zastosować opcje break albo continue. Najczęściej poprzedza je instrukcja warunkowa wskazująca kiedy pętla powinna zostać przerwana. Przerwanie dotyczące wszystkich instrukcji po tym jak warunek przyjmie wartość False uzyskamy stosując opcję break. Natomiast gdy tylko pomijamy instrukcje, dla których warunek ma wartość false stosujemy opcję continue.
for i in range(5,10):
sum_il=0
for j in [2,1,0,-1,-2,-3]:
if j is not 0:
sum_il=sum_il+i/j
else:
break
print(sum_il)
|
for i in range(5,10):
sum_il=0
for j in [2,1,0,-1,-2,-3]:
if j is not 0:
sum_il=sum_il+i/j
else:
continue
print(sum_il)
|
>>>
7.5
9.0
10.5
12.0
13.5
|
>>>
-1.6666666666666667
-2.0
-2.3333333333333335
-2.6666666666666665
-3.0
|
Programy wygenerowały różne wyniki, choć różniły się wyłącznie opcją przerywania. Break powodował wyjście z pętli wewnętrznej bez sprawdzania warunków dla kolejnych iteratorów. Continue natomiast pominęła tylko iterator dający False. W obu wypadkach zewnętrzna pętla for nie została przerwana dając ostatecznie 6 wyników.
Pętla while
Pętla while ma prostą budowę:
while warunek: instrukcja 1... instrukcja 2... ... break continue
Umożliwia ona wielokrotne wykonanie instrukcji dopóki warunek będzie wykazywał wartość TRUE. Aby pętla zakończyła się warunek musi być odpowiednio modyfikowany, by w końcu uzyskał wartość “False”. Instrukcje break i continue nie są obowiązkowe.
Pętla while może zastępować pętlę for. Obie poniżej pokazane instrukcje wyliczają sumę liczb 1+2+3+…+100. Widać, że pętla for jest krótsza niż pętla while.
suma=0
for i in range(1,100):
suma=suma+i
print(suma)
|
suma=0
i=1
while i<100:
suma=suma+i
i=i+1
print(suma)
|
>>>
4950
|
>>>
4950
|
Z drugiej strony pętla while umożliwia wykonanie zmiennej liczby powtórzeń instrukcji w zależności od ich wartości. Np. umożliwia znalezienie największego n dla którego suma 1+2+…+n jest mniejsza od 1000.
suma=0
n=0
while suma<1000:
n=n+1
suma=suma+n
print(n,' ',suma)
print(n-1,' ',suma-n)
|
>>>
45 1035
44 990
|
Przerywanie zastosowane w pętli w odpowiednim miejscu pozwala na skrócenie obliczeń o jeden obrót pętli. W przypadku długich programów i wielu instrukcji wykonywanych podczas jednego obrotu pętli może to mieć znaczenie.
suma=0
n=0
while suma<1000:
if suma+n+1>1000:
break
else:
n=n+1
suma=suma+n
print(n,' ',suma)
|
>>>
44 990
|
W Pythonie nie ma innych instrukcji poza wymienionymi i wszystkie programy pisze się za pomocą wymienionych. W rezultacie dość łatwo jest nauczyć się tego języka programowania.