Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

2. Logické výrazy, cykly, podmínky, funkce

Cykly a podmínky představují tzv. řídící struktury (anglicky control flow statemens), které větví běh programu, či slouží k opakovanému provádění určitých příkazů

Porovnání

Operátory porovnání: ==, is, !=, <, >, >=, <=, in. Negace: not

Výsledek operace/porovnání je True (Pravda) nebo False (Nepravda)

Některé operace nejsou povolené pro určité typy proměnných.

a = 5
b = 7
 
print(a>b)  # vraci False protoze a = 5 a b = 7, tedy a < 7
print(not a>b)  # vraci True protoze provadime negaci False

Logické operátory lze spojovat

  • a (and, &) - a>b and b>c (logické a), případně a>b & b>c (bitové a)
  • nebo (or, |) - a>b or a>c (logické nebo), případně a>b | a>c (bitové nebo)

a = True
b = False

a = 14 #bitově 1110
b = 4 #bitově 0100

print(b and a)
print(b & a)

print(b or a)
print(b | a)

Příkazy if - elif - else

Podmínka if

Proběhne daný blok kódu při splnění podmínky (logický_výraz==True)

if logický_výraz:
    <blok příkazů>

a = 9.0
 
if type(a) == type(0):
    print('Proměnná a je celé číslo!')
 
# místo type(a) == type(0) lze použít type(a) == int nebo funkci isinstance(a, int)

Podmínka if - else

Proběhne první blok příkazů při splnění podmínky (logický_výraz==True) a druhý blok příkazů při jejím nesplnění (logický_výraz==False).

if logický_výraz:
    <první blok příkazů>
else:
    <druhý blok příkazů>

a = 5
b = 7
 
if a > b:
    print('a > b')
else:
    print('a <= b')

Úloha 1 - Dělitelnost

Napište podmínku, díky které zjistíte zda je číslo N dělitelné čísly x a y.

N = int(input('Zadejte cislo N:'))
x = int(input('Zadejte x:'))
y = int(input('Zadejte y:'))
 
# Napište podmínku níže

Proběhne první blok příkazů při splnění podmínky 1 (logický_výraz_1==True), druhý blok příkazů při splnění podmínky 2 (logický_výraz_2==True) a třetí blok příkazů při nesplnění žádné z podmínek (logický_výraz_1==False and logický_výraz_2==False). Možné přídávat libovoné množství větví elif

if logický_výraz_1:
     <první blok příkazů>
elif logický_výraz_2:
    <druhý blok příkazů>
...
else:
    <třetí blok příkazů>

a = 5
b = 7
 
if a > b:
    print('a > b')
elif a == b:
    print('a = b')
else:
    print('a < b')

Úloha 2 - sudé, liché nebo nula

Dostanete od uživatele celé číslo na vstupu. Napište podmínku, která napíše Nula (když bude n rovné 0), Sudé (pokud bude číslo sudé a nebude 0), případně Liché (když bude liché a nebude 0).

n = int(input('Napiš celé číslo: '))
 
# Napište podmínku níže

Úloha 3 - Lze sestrojit trojúhelník

Dopište správně podmínku do programu níže.

# Program, ktery zjisti jestli lze sestrojit trojuhelnik
'''
a = 3
b = 4
c = 4
'''
 
a = int(input('zadej stranu a:'))
b = int(input('zadej stranu b:'))
c = int(input('zadej stranu c:'))
 
if <podminka>:
    print('Trojuhelnik lze sestrojit')
else:
    print('Trojuhelnik nelze sestrojit')

Cykly

  • umožňují opakovaní určitého bloku kódu

Cyklus for

  • Umožňuje provést daný počet opakování
  • Obsahuje výraz což je buď jedna proměnná nebo n-tice (tuple)

for <výraz> in <iterovatelný_objekt>:
    <blok_kódu_for>

Případně:

for <výraz> in <iterovatelný_objekt>:
    <blok_kódu_for>
else:
    <blok_kódu_else>

  • Blok else proběhne po skončení cyklu, pokud neskončí

veta = 'Zaklady programovani.'
 
for pismeno in veta:
    print(pismeno, end=' ')

# funkce range(), slouží k výpisu posloupnosti/řady čísel
range(10) # posloupnost 0-9
range(5,10) # posloupnost 5-9
range(1,10,2) # posloupnost 1-9 po 2 (1,3,5,7,9)
 
 
for x in range(5,10):
    print(x, end = ' ')

Úloha 4 - 7 trpaslíků

Dopište program tak, aby se postupně vypsala čísla jednotlivých trpaslíku.

<cyklus>:
    <vypis_cisel_jednotlivych_trpasliku>

Úloha 5 - Výpočet faktoriálu pomocí cyklu for

Vypočtěte faktoriál čísla s pomocí cyklu for a funkce range.

cislo = 9
 
<cyklus_pro_vypocet_faktorialu>
 
print('Faktorial cisla {0:d} je {1:d}'.format(cislo, faktorial))

Cyklus while

  • Cyklus, který probíhá dokud platí podmínka

while <logický_výraz>:
     <blok_kódu_while>

Případně:

while <logický_výraz>:
     <blok_kódu_while>
else:
    <blok_kódu_else>

  • Probíhaní cyklu lze ukončit příkazem break.
  • Probíhaní daného bloku pro konkrétní iteraci ukončí příkaz continue a program skočí opět na začátek bloku (jakoby začínala další iterace, cyklus)

# Výpis čísla od 1 do 10 s využitím cyklu while
 
 

Úloha 6 - Výpočet faktoriálu pomocí cyklu while

Vypočtěte faktoriál čísla s pomocí cyklu while.

cislo = 2
 
# Zde doplňte cyklus pro výpočet faktoriálu
 
<cyklus_pro_vypocet_faktorialu>
 
 
print('Faktorial cisla {0:d} je {1:d}'.format(cislo, faktorial))

Úloha 7 - Napište program, který umožní výpočet Ludolfova čísla pomocí součtu Leibnizovi řady

Využijte jeden z cyklů a příslušné matematické operace (odkaz na vzorec)

 
print('pi: ' + str(pi))

Funkce

  • Pro opakování nějaké části kódu
  • Prostředky pro zabalení a parametrizování funkčnosti
  • Python nabízí globální funkce, lokální funkce, lambda funkce a metody

def <název_funkce>(<parametry>):
    <prikaz>
    <prikaz>
    <prikaz>

Případně s výstupní proměnnou:

def <název_funkce>(<parametry>):
    <prikaz>
    <prikaz>
    <prikaz>
    return <vystup>

# Pocet samohlasek ve vete
 
def pocet_samohlasek(veta):
#<napiste kod>

veta = 'S funkcemi se budete potkavat casto.'
 
print(pocet_samohlasek(veta))

Úloha 8 - Bez samohlásek

Napište funkci, která odstraní písmena q,w,x,y z věty.

def bez_pismen(veta):
 
    <dopiste_funkci>
 
    print(vystupni_veta)

veta = 'ywqGqratxulqwwujwxiy.xywq xwqwFquyxnqkwcxxyiywyw xxwqsqwewyx wqtxxiyw pxyqowvyyexdwlqowqqx xxnqxapwyrqoqgyxramxoqvyqaxtqx sqpwrxxaqvnwqewwxy!'
bez_pismen(veta)

Výchozí hodnoty parametrů

  • Přiřazení výchozí hodnoty při definici funkce
  • Možnost volat funkci bez explicitního zadání jednotlivých hodnot parametrů

def f(a=5, b=0):
    print((a**2)+b)
 
a = f()
b = f(9)
 
type(a)

Parametr nebo argument

  • Parametr je proměnná, s kterou pracuje definice funkce
  • Argument je hodnota proměnné, s kterou bude funkce dále pracovat

Argumenty vs. keyword argumenty

  • Funkce je možné volat i s explicitním vyjádřením jednotlivých parametrů
  • Výhody:
    • Možnost měnit pořadí parametrů
    • Přehlednost (v případě, že má daná funkce velké množství vstupních parametrů)

a = f(b=2,a=9)

Úlohy na doma

Níže je uvedeno několik příkladů, které si vyřešte sami v rámci domácí práce

Matice na standardním výstupu

a) celá matice

Vykreselte čtvercovou matici celých kladných čísel čísel rostoucích od 0 do $N-1$, kde $N = n\cdot n$ a $n$ je počet řádků a sloupců matice
Uvažujte $2 \leq n \leq 10$
Pro $n=10$ bude matice vypadat takto

 0  1  2  3  4  5  6  7  8  9 
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99

Zkuste úlohu vyřešit pomocí jednoho for cyklu nebo pomocí dvou for cyklů vnořených do sebe

# reseni pomoci jednoho for cyklu
 
 
# reseni pomoci dvou for cyklu

b) první diagonála

Vykreselte pouze první diagonálu matice z předchozího úkolu

Pro $n=10$ bude matice vypadat takto

 0
   11
      22
         33
            44
               55
                  66
                     77
                        88
                           99

Opět se zamyslete nad řešením pomocí jednoho nebo dvou vnořených cyklů

N = 10  # pocet radku a sloupcu matice
 
# reseni pomoci jednoho for cyklu
 
 
# reseni pomoci dvou for cyklu

c) druhá diagonála

Vykreselte pouze druhou diagonálu matice z před předchozího úkolu

Pro $n=10$ bude matice vypadat takto

                            9 
                        18
                     27
                  36
               45
            54
         63
      72
   81
90

Opět se zamyslete nad řešením pomocí jednoho nebo dvou vnořených cyklů

# reseni pomoci jednoho for cyklu
 
 
# reseni pomoci dvou for cyklu

d) obě diagonály

Vykreselte obě diagonály matice

Pro $n=10$ bude matice vypadat takto

 1                          9  
   11                   18
      22             27
         33       36
            44 45
            54 55
         63       66
      72             77
   81                   88
90                         99

Opět se zamyslete nad řešením pomocí jednoho nebo dvou vnořených cyklů

# reseni pomoci jednoho for cyklu
 
 
# reseni pomoci dvou for cyklu

Prvočísla

Napište funkci isprime(), která bude vracet True pokud bude argumet funkce prvočíslo, jinak vrátí False

 
def isprime(n):
    '''
    isprime(n) vraci True pokud je n prvocislo, jinak vrati False
    funkce nekontroluje, jestli je n cele cislo
    funkce postupne prochazi vsechny cisla od 2 az do hodnoty argumentu a zjistuje, jestli je zbytek po deleni roven nule
 
    '''
 
    <vas_kod>
 
 
# vypise navratovou hodnotu funkce na standardni vystup
print(isprime(17))

Domácí úkol

Domácí úkol najdete na webu předmětu.

courses/bab37zpr/tutorials/lab02.txt · Last modified: 2022/09/26 14:23 by zizieada