Chyby a nejasnosti

Najdi chybu

Špatně

In [1]:
for cím in range(5):
    for co in range(5):
        print(co*cim, end='')
    print()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-17dd5a50c293> in <module>()
      1 for cím in range(5):
      2     for co in range(5):
----> 3         print(co*cim, end='')
      4     print()

NameError: name 'cim' is not defined

Správně

Jeden špatný znak (dlouhé í) a celý kód je mimo provoz

In [2]:
for cim in range(5):
    for co in range(5):
        print(co*cim, end='')
    print()
00000
01234
02468
036912
0481216

Jak toto vylepšit?

Před

In [3]:
for sloupec_x in range(5):
    print()
    for radek_x in range(5):
        print('X', end='')
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX

Po

Tento kód je lepší, protože nevypisuje na začátku zbytečná prázdný řádek a po posledním řádku s "X" je naopak zalomení provedeno

In [4]:
for sloupec_x in range(5):
    for radek_x in range(5):
        print('X', end='')
    print()
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX

Najdi celou řadu chyb

Před

In [5]:
for i in range(1,16):
    if(i//3):
        print('bum')
    if(i//5):
        print('bác')
    if(i//5 and i//3):
        print('bum-bác')
    else:
        print(i)
1
2
bum
3
bum
4
bum
bác
bum-bác
bum
bác
bum-bác
bum
bác
bum-bác
bum
bác
bum-bác
bum
bác
bum-bác
bum
bác
bum-bác
bum
bác
bum-bác
bum
bác
bum-bác
bum
bác
bum-bác
bum
bác
bum-bác
bum
bác
bum-bác

Po

  • Bylo použito dělení místo zbytku po dělení
  • Místo různých větví pro tutéž podmínku (if, elif, else) byly použity jen ify a jeden else
  • Podmínka zachycující čísla dělitelná třemi i pěti byla na konci místo na začátku
In [6]:
for i in range(1,16):
    if(i % 5 == 0 and i % 3 == 0):
        print('bum-bác')
    elif(i % 3 == 0):
        print('bum')
    elif(i % 5 == 0):
        print('bác')
    else:
        print(i)
1
2
bum
4
bác
bum
7
8
bum
bác
11
bum
13
14
bum-bác

Najdi chybu 3

Před

In [6]:
for i in range(5):
    for j in 'X'*i:
        print(j,end=' ')
    print()
X 
X X 
X X X 
X X X X 

Po

Protože v předchozím příkladu se hodnota "i" měnila od nuly, byl na výstupu opět jeden zbytečný prázdný řádek na začátku a mimo to chyběl poslední řádek. Vyřešeno úpravou rozsahu funkce range u vnějšího cyklu.

In [7]:
for i in range(1, 6):
    for j in 'X'*i:
        print(j,end=' ')
    print()
X 
X X 
X X X 
X X X X 
X X X X X 

Ctverec

Slozite

In [13]:
for x in range (5):
    for y in range (5):
        if x == 0 or x == 4:
            print('X', end=' ')
        elif y == 0 or y == 4:
            print('X', end=' ')
        else:
            print(' ', end=' ')
    print()
X X X X X 
X       X 
X       X 
X       X 
X X X X X 

Jednoduse

In [7]:
velikost = 5
for radek in range(velikost):
    if radek == 0 or radek + 1 == velikost:
        print('X ' * velikost)
    else:
        print('X ', '  ' * (velikost - 3), 'X')
X X X X X 
X       X
X       X
X       X
X X X X X 

Print

END

Pojmenovaný argument end neodstraňuje zalomení, ale nahrazuje jej čímkoli jiným.

In [9]:
print('Pepa', end=" ---- \n")
print('Novák', end="!")
Pepa ---- 
Novák!

Návratová hodnota

Jak jsme si ukázali dnes, funkce print nemá ve své definici return a proto nic nevrací.

In [11]:
promenna = print('Pepa Novak')
Pepa Novak
In [12]:
promenna
In [13]:
type(promenna)
Out[13]:
NoneType

Obecné

  • Používejte srozumitelné názvy proměnných a vyhýbejte se názvům jako last a last_last
  • Pochvala za používání anglických názvů proměnných
  • Pokud si nevíte rady, napiště alespoň něco, jinak Vám nemáme jak poradit
  • Neodevzdávejte zip soubory, ale jednotlivé programy. Usnadníte tím kontrolu
  • Odevzdávejte každý úkol v samostatném souboru - ušetříte sobě i nám práci s komentáři
  • Zkuste si své programy spustit před odevzdáním, abystě měly jistotu, že opravdu fungují