Ne všechno se dá použít jako jméno proměnné. Fungují pro proměnné následující jména? Pokud ne, proč asi?
ANO: x, tlacitko4, krůta, kratsiStrana, POCET_BODU, _ (podtržítko), π (pí), _cache, __name__
NE: 34, 3e4, $i, druha-odmocnina, readme.txt, True, while
34 = 'ahoj' # proměnná nemůže být číslo, proměnná nemůže začínat číslem
3e4
$i = 'ahoj' # proměnná nemůže začínat speciálním znakem
druha-odmocnina = 'ahoj' # proměnná nemůže obsahovat pomlčku (pro Python má speciální význam)
readme.txt = 'ahoj' # proměnná nemůžem obsahovat tečku (pro Python má speciální význam)
True = 'ahoj' # nelze jako proměnnou použít tzv. vyhrazené slovo (reserved word, keyword)
Další vyhrazená slova zde: https://docs.python.org/3/reference/lexical_analysis.html?highlight=reserved#keywords
'abc' > 'Abc'
'abc' < 'ábč'
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".
print('a:', ord('a'), ' A:', ord('A'), ' á:', ord('á'))
Je možné toto zjednodušit?
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.')
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.')
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í.
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.")
LEPŠÍ Ř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.
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??
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)
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
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
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
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.")