Nauč se Python > Kurzy > Začátečnický kurz PyLadies > První program > Zpětná vazba k domácím projektům

Zpětná vazba k domácím projektům

Použiji proměnnou, která neexistuje

In [1]:
print('Obvod čtverce je: ', 4*strana)
strana = 10
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-5755e86bb26d> in <module>
----> 1 print('Obvod čtverce je: ', 4*strana)
      2 strana = 10

NameError: name 'strana' is not defined

ASCII tabulka

In [ ]:
'abc' > 'Abc'

PROČ?

Existuje něco jménem ASCII tabulka, která každému znaku přiřazuje číselnou hodnotu. V Pythonu tohle číslo lze získat pomocí funkce ord, např. ord("a"). Protože velké A má číselnou hodnotu 65 a malé "a" má 97, platí, že "A" < "a".

KÁMEN - NŮŽKY - PAPÍR

Je možné toto zjednodušit?

In [ ]:
tah_cloveka = 'kámen'
tah_pocitace = 'papír'

if tah_cloveka == 'kámen' and tah_pocitace == 'kámen'or tah_cloveka == 'nůžky' and tah_pocitace == 'nůžky' or tah_cloveka == 'papír' and tah_pocitace == 'papír':
    print('Plichta.')
elif tah_cloveka == 'kámen' and tah_pocitace == 'nůžky' or tah_cloveka == 'nůžky'and tah_pocitace == 'papír' or tah_cloveka == 'papír' and tah_pocitace == 'kámen':
    print('Vyhrála jsi!')
elif tah_cloveka == 'kámen' and tah_pocitace == 'papír'or tah_cloveka == 'papír' and tah_pocitace == 'nůžky' or tah_cloveka == 'nůžky' and tah_pocitace == 'kámen':
    print('Počítač vyhrál.')

Ano je !

In [ ]:
tah_cloveka = 'kámen'
tah_pocitace = 'papír'

if tah_cloveka ==  tah_pocitace:
    print('Plichta.')
elif tah_cloveka == 'kámen' and tah_pocitace == 'nůžky' or tah_cloveka == 'nůžky'and tah_pocitace == 'papír' or tah_cloveka == 'papír' and tah_pocitace == 'kámen':
    print('Vyhrála jsi!')
else:
    print('Počítač vyhrál.')

Najdi chyby 1

Tento kousek kódu, který se stará o výběr tahu počítače na základě náhodně vygenerovaného čísla, může vypada na první pohled správně, ale ve skutečnosti jej stačí párkrát spustit a chybička se projeví.

In [ ]:
from random import randrange
cislo = randrange(2)

if cislo == 0:
    tah_pocitace = "kámen"
    print("Počítač vybral kámen.")
if cislo == 1:
    print("Počítač vybral nůžky.")
    tah_pocitace = "nůžky"
else:
    tah_pocitace = "papír"
    print("Počítač vybral papír.")

SPRÁVNÉ ŘEŠENÍ

Chybička byla v záměně elif za další if což způsobilo rozdělení jedné podmínky se třemi větvemi na dvě samostatné podmínky, z nichž ta první měla jen jednu větev (jen jeden if) a ta druhá dvě (jeden if a jeden else).

Další chyba pak byla v generování náhodných čísel, protože randrange(2) vrátí vždy jen 0 nebo 1.

In [ ]:
from random import randrange
cislo = randrange(3)

if cislo == 0:
    tah_pocitace = "kámen"
    print("Počítač vybral kámen.")
elif cislo == 1:
    print("Počítač vybral nůžky.")
    tah_pocitace = "nůžky"
else:
    tah_pocitace = "papír"
    print("Počítač vybral papír.")

JDE TO JEŠTĚ VYLEPŠIT??

In [ ]:
from random import randrange
cislo = randrange(3)

if cislo == 0:
    tah_pocitace = "kámen"
elif cislo == 1:
    tah_pocitace = "nůžky"
else:
    tah_pocitace = "papír"

print('Počítač vybral', tah_pocitace)

Najdi chyby 2

Copak se asi stane s proměnnou strana ještě před výpočtem povrchu a objemu?

In [ ]:
strana = int(input('Zadej velikost strany v cm: '))
strana = 2852
print('Objem krychle o straně',strana,'cm je', strana**3,'cm3')
print('Obsah krychle o straně',strana,'cm je', 6*strana**2,'cm2')

Bohatá a šťastná

Několik možných řešení programu šťastná-bohatá. Všechny dělají totéž, ale některé jsou zkrátka lépe čitelné a kompaktnější. ŘEŠENÍ 1

In [ ]:
print('Odpovídej "ano" nebo "ne".')
stastna = input('Jsi šťastná? ')
bohata = input('jsi bohatá? ')

if stastna == 'ano':
    if bohata == 'ano':
        print('Gratuluji')
    elif bohata == 'ne':
        print('zkus míň utrácet')

elif stastna == 'ne':
    if bohata == 'ne':
        print('to je mi líto')
    elif bohata == 'ano':
        print('zkus se víc usmívat')

else:
    print('nerozumím')

ŘEŠENÍ 2

In [ ]:
print('Odpovídej "ano" nebo "ne".')
stastna_retezec = input('Jsi šťastná? ')
if stastna_retezec == 'ano':
    stastna = True
elif stastna_retezec == 'Ano':
    stastna = True
elif stastna_retezec == 'ne':
    stastna = False
elif stastna_retezec == 'Ne':
    stastna = False
else:
    print('Nerozumím!')

bohata_retezec = input('Jsi bohatá? ')
if bohata_retezec == 'ano':
    bohata = True
elif bohata_retezec == 'Ano':
    bohata = True
elif bohata_retezec == 'ne':
    bohata = False
elif bohata_retezec == 'Ne':
    bohata = False
else:
    print('Nerozumím!')

if bohata:
    if stastna:
    # Je bohatá a zároveň štǎstná, ta se má.
        print('Gratuluji!')
elif bohata:
    # Je bohatá, ale není „bohatá a zároveň šťastná“,
    # takže musí být jen bohatá.
    print('Zkus se víc usmívat.')
elif stastna:
    # Tady musí být jen šťastná.
    print('Zkus míň utrácet.')
else:
    # A tady víme, že není ani šťastná, ani bohatá.
    print('To je mi líto.')

ŘEŠENÍ 3

In [ ]:
print('Odpovídej "ano" nebo "ne".')
stastna_retezec = input('Jsi šťastná? ')
bohata_retezec = input('Jsi bohatá? ')

if stastna_retezec == "ano":
    if bohata_retezec == "ano":
        print("Gratuluji.")
    else:
        print("Zkus míň utrácet.")
        
elif bohata_retezec == "ano":
    print("Zkus se více usmívat.")
    
else:
    print("To je mi líto.")

Obecné rady, prosby a doporučení

  • Používání nových (neprobraných) funkcionalit --> ANO/NE?
  • Názvy proměnných mají mít vysvětlující charakter, takže jednoznakové názvy jsou zapovězeny.
  • Pište komentáře. Když narazíme na špatné řešení, snáze se nám radí, když vím, jak jste se k němu dostaly a na co jste při tom myslely. Komentáře ke standardním věcem psát netřeba.
  • Odevzdávejte nejpozději v neděli večer, konzultujte na Slacku
  • Spouštějte svůj program opakovaně, snažte se simulovat všechny možnosti, které mohou nastat

Toto je stránka lekce z kurzu, který probíhá nebo proběhl naživo s instruktorem.