Feedback k domácím projektům

Je možné tohle 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(2)

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.")

Najdu chybu 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')

Šťastná - bohatá

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_retezec = input('Jsi šťastná?')
bohata_retezec = input('Jsi bohatá?')

if stastna_retezec == 'ano':
    if bohata_retezec == 'ano':
        print ("ty se máš")
    elif bohata_retezec == 'ne':
        print ("zkus mín utrácet")
elif stastna_retezec == 'ne':
    if bohata_retezec == 'ano':
        print ("zkus se víc usmívat")
    elif bohata_retezec == 'ne':
        print ("to je mi líto")
else:
    print ("Nerozumím.")

Řešení 2

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

if stastna_retezec == 'ano' and bohata_retezec == 'ano':
    print ("Grauluji")
elif stastna_retezec == 'ano' and bohata_retezec == 'ne':
    print('Zkus míň utrácet.')
elif stastna_retezec == 'ne' and bohata_retezec == 'ano':
    print ("zkus se víc usmívat")
elif stastna_retezec == 'ne' and bohata_retezec == 'ne':
    print ("to je mi líto")
else:
    print ("Nerozumim")

Řešení 3

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

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

if bohata and stastna:
    print('Gratuluji!')
elif bohata:
    print('Zkus se víc usmívat.')
elif stastna:
    print('Zkus míň utrácet.')
else:
    print('To je mi líto.')

Otázka: Jak na hezké chybové hlášky a blbuvzdorný program?

Chybová hláška nejčastěji znamená vyvolanou výjimku, které se naučíme odchytávat a zpracovávat později.

Obecné rady, prosby a doporučení

  • Pochvala za krásné formátování odpovědí.
  • Pochvala za angličtinu v komentářích (pro jednu z vás).
  • Žádné obrázky, fotky monitoru nebo screenshoty - vše jen jako psaný text nebo program v Pythonu s příponou .py.
  • Klidně dávejte do jednoho souboru více úloh, ale dejte pozor, aby na konci byly všechny odkomentované a funkční
  • Promměné píšeme vždy malými písmeny. Časem narazíme na jiné pojmenovávání, kde velká písmena použijeme k rozlišení od obyčejných proměnných.
  • Názvy proměnných mají mít vysvětlující charakter, takže jednoznakové názvy jsou zapovězeny.
  • Dávejte pozor na počty mezer. Odsazuje se vždy čtyřmi mezerami a násobky čtyř.
  • Spouštějte (testujte) svůj program. Na většinu chyb narazíte samy, pokud budete sledovat, co váš program dělá.
  • Importy patří na samotný začátek souboru.
  • Pište komentáře. Když narazím na špatné řešení, snáze se mi 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 pondělí večer!