number = 42
if number < 0:
print("negative value") # chyba! vnorené príkazy musia byť odsadené na novom riadku aspoň jednou medzerou alebo tabulátorom
Interpreter očakáva za podmienkou príkazu if
aspoň jeden ďalší príkaz, ktorý sa vykoná ak je podmienka splnená. Keďže príkaz print('negative value')
nie je na začiatku riadku odsadený žiadnou medzerou alebo tabulátorom, Interpreter ho považuje za príkaz, ktorý by mal nasledovať za if
, a príkaz if
bude považovať za neukončený. Podobne, nasledujúci kód je logicky chybný keďže sa správa negative number, reset to 0
vypíše aj pre nezáporné čísla. Aby bol príkaz print
vykonaný iba pri splnení podmienky, musí byť odsadený do rovnakého bloku ako number = 0
.
number = 42
if number < 0:
number = 0
print("negative number, reset to 0") # logická chyba! ak sa má správa vypísať iba pre záporné čísla,
# musí byť príkaz rovnako odsadený ako number = 0
if number < 0:
number = 0
print "negative number, reset to 0" # chyba! odsadenie musí byť rovnaké pre všetky príkazy v jednom bloku
Vetvenia¶
number = 42
# podmienkou príkazu if môže byť ľubovoľný výraz, ktorý sa vyhodnotí ako Boolovská hodnota
# môžete napr. používať operátory <, >, <=, >=, ==, !=, ‘in’ (testovanie či objekt obsahuje daný prvok) a
# kombinovať ich logickými spojkami and, or, not
if number < 0:
print("negative")
else: # vetva ‘else’ je nepovinná
print("zero or positive")
# = zero or positive
Viacero podmienok môžete zreťaziť klauzulou elif
(zreťazenie cez elif
nahradzuje v Pythone príkaz switch/case
z jazyka C)
if number < 0:
number = 0
print("negative number, reset to 0")
elif number == 0:
print("zero")
elif number == 1:
print("single")
else:
print("more")
# = more
Pre jednoduché podmienené priradenie môžete použiť skrátený zápis podobný ternárnemu príkazu z C ?:
Hodnota1 if podmienka else hodnota2
- výraz sa rovná hodnota1
ak je podmienka splnená, alebo hodnota2
ak je nesplnená.
result = "negative" if number < 0 else "positive or zero"
result # = positive or zero
Cykly¶
Python podporuje cyklus while
a iterovanie prvkov cez príkaz for
.
i = 0
while i < 10: # cyklus `while` vykonáva vnorený blok príkazov pokiaľ je podmienka splnená.
print(i)
i += 1 # skrátený zápis i = i + 1 (Python nepodporuje operátor ++/-- z jazyka C)
# ‘for‘ cyklus sa používa na postupné prechádzanie prvkov
numbers = [1, 2, 3]
# napr. pre zoznam, za ‘for’ definujete názov premennej, do ktorej budú postupne dosadené všetky prvky zoznamu
for x in numbers:
print(x)
print("x={0}".format(x)) # po iterovaní je premenná definovaná aj mimo bloku cyklu a má nastavenú poslednú hodnotu
# ak chcete naraz vypísať index a hodnotu, môžete použiť funkciu enumerate()
for i, v in enumerate(["tic", "tac", "toe"]):
print(i, v) # do i je priradený index (od 0) a do v hodnota
# ak budete počas iterovania pridávať alebo odoberať nejaké hodnoty zo zoznamu, je bezpečnejšie pre iterovanie urobiť jeho kópiu
for x in numbers[:]: # vytvoríme kópiu cez rozsah [:]
numbers.append(x * x) # pridáme na koniec zoznamu druhé mocniny
print(numbers) # = [1, 2, 3, 1, 4, 9]
Pre jednoduché iterovanie si môžete vygenerovať postupnosť čísel pomocou funkcie range()
, napr.:
for x in range(10): # vygeneruje sa postupnosť [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(x)
# ako argument funkcie range() môžete voliteľne zadať aj počiatočnú hodnotu a krok
range(3, 7) # = [3, 4, 5, 6]
range(10, 4, -2) # = [10, 8, 6] - v obrátenom poradí bez poslednej hodnoty
Pre prerušenie cyklu, alebo pre preskočenie kódu a pokračovanie ďalšou iteráciou sa používajú príkazy break
a continue
, ktoré fungujú podobne ako v jazyku C (môžete ich použiť aj v cykloch while
).
for x in range(1, 10):
if x % 2 == 0:
print("continue for even number")
continue # pre párne čísla sa pokračuje nasledujúcou iteráciou a ďalšie príkazy v cykle sa preskočia
if x == 5:
break # cyklus sa preruší pri x == 5 (pri vnorených cykloch ‘break’ preruší iba najbližší cyklus)
print(x)
# vypíše sa:
# 1
# continue for even number
# 3
# continue for even number
Úloha 3.2¶
Naprogramujte skript jednoduchej kalkulačky, ktorá v cykle načíta na vstupe výrazy v tvare:
[číslo1] [operácia] [číslo2]
a vypočíta ich hodnotu. Čísla môžu byť celé alebo desatinné a operácia môže byť +-*/.
Výsledok vypíšte na 4 desatinné miesta. Ako vstup použite nasledujúci zoznam výrazov.
exprs = ["1 + 2", "2 * 3,14", "2 - 3.0", "10 / 5"]
Úloha 3.3¶
Na vstupe máte nasledujúce textové dáta:
data = """'power'; 'weight'; 'hybrid'; 'producer'
55.3; 1450; false; 'ford'
100; 2500; false; 'ford'
60.5; 1150; true; 'toyota'
56; ?; false; 'volkswagen'
75.2; 1480; false; 'volkswagen'
80.1; 1630; false; 'peugeot'"""
Napíšte skript, ktorý:
- Rozdelí text na riadky a oddelí dátové polia. Hodnoty polí prevedie z reťazca na dátový typ Pythonu, tzn. čísla, reťazce bez oddeľovačov a Boolovské hodnoty.
- Chýbajúce hodnoty označené
?
reprezentujte konštantouNone
. - Pre číselné polia vypíše základné štatistiky: min./max./priemernú hodnotu a štandardnú odchýlku zaokrúhlené na 4 desatinné miesta.
- Pre textové polia vypíše zoznam hodnôt usporiadaný podľa abecedy.