Najdi chyby, nejasnosti či nepřesnosti v tomto kódu:
zvire = input("Zadej zvíře: ")
def je_v_seznamu(zvire):
zvirata = ["pes", "kočka", "králík", "had", "andulka", "želva"]
for jmeno in zvirata:
if zvire in zvirata:
return "True"
else:
return "False"
print(je_v_seznamu(zvire))
Po úpravě:
zvirata = ["pes", "kočka", "králík", "had", "andulka", "želva"]
zvire = input("Zadej zvíře: ")
def je_v_seznamu(zvirata, zvire):
if zvire in zvirata:
return True
else:
return False
print(je_v_seznamu(zvirata, zvire))
Je možné tuto funkci ještě zkrátit a zjednodušit?
zvirata = ["pes", "kočka", "králík", "had", "andulka", "želva"]
zvire = input("Zadej zvíře: ")
def je_v_seznamu(zvirata, zvire):
return zvire in zvirata
print(je_v_seznamu(zvirata, zvire))
Další podobná funkce:
def kratke(jmeno = zvirata):
for i in range(len(jmeno)):
if len(jmeno[i]) < 5:
print(jmeno[i])
else:
print(end = "")
return jmeno
kratke(zvirata)
A její přehlednější varianta:
zvirata = ["pes", "kočka", "králík", "had"]
def kratke(seznam):
novy_seznam = []
for zvire in zvirata:
if len(zvire) < 5:
novy_seznam.append(zvire)
return novy_seznam
print(kratke(zvirata))
with open("static/basnicka.txt", encoding="utf-8") as soubor_s_basnickou:
basnicka = soubor_s_basnickou.read()
seznam_versu = basnicka.split("\n") # Rozdělí básničku na jednotlivé verše (řádky) [seznam]
seznam_versu.reverse() # Obrátí pořadí veršů v seznamu
obracena_basnicka = "\n".join(seznam_versu) # Složí zpět seznam na řetězec a mezi verše vloží \n
print(obracena_basnicka)
with open("static/basnicka.txt", encoding="utf-8") as soubor_s_basnickou:
seznam_versu = soubor_s_basnickou.readlines()
for vers in seznam_versu[::-1]:
print(vers, end="")
with open("static/basnicka.txt", encoding="utf-8") as soubor_s_basnickou:
basnicka = soubor_s_basnickou.read()
seznam_versu = basnicka.split("\n") # Rozdělí básničku na jednotlivé verše (řádky) [seznam]
nova_basnicka = [] # Seznam pro novou básničku, která obrácením pořadí slov vznikne
for vers in seznam_versu: # Pro každý verš v originální básničce
slova = vers.split() # Rozdělí verš na slova [seznam]
slova.reverse() # Obrátí pořádí slov
novy_vers = " ".join(slova) # Spojí obrázená slova zpět do řetězce
nova_basnicka.append(novy_vers) # Přidá nový verš do nové básničky
obracena_basnicka = "\n".join(nova_basnicka) # Složí zpět seznam na řetězec a mezi verše vloží \n
print(obracena_basnicka)
with open("static/basnicka.txt", encoding="utf-8") as soubor_s_basnickou:
seznam_versu = soubor_s_basnickou.readlines()
for i, vers in enumerate(seznam_versu):
slova = vers.split()
slova.reverse()
seznam_versu[i] = " ".join(slova)
print("\n".join(seznam_versu))
with open("static/basnicka.txt", encoding="utf-8") as soubor_s_basnickou:
basnicka = soubor_s_basnickou.read()
seznam_slok = basnicka.split("\n\n") # Rozdělí básničku na jednotlivé sloky [seznam]
seznam_slok.reverse()
basnicka = "\n".join(seznam_slok)
print(basnicka)
from random import shuffle
with open("static/basnicka.txt", encoding="utf-8") as soubor_s_basnickou:
seznam_versu = soubor_s_basnickou.readlines()
for i, vers in enumerate(seznam_versu):
slova = vers.split()
shuffle(slova)
seznam_versu[i] = " ".join(slova)
print("\n".join(seznam_versu))
Takto použitá funkce situaci spíše komplikuje, než aby něčemu pomohla.
zvirata = ['had', 'andulka', 'pes', 'kočka', 'králík']
dvojice = []
vysledek = []
def razeni_had(seznam1, seznam2, seznam3):
'''seřadí výchozí seznam1 podle abecedy, ale bude ignorovat první písmeno'''
for slovo in seznam1:
seznam2.append([slovo[1:], slovo])
seznam2.sort()
for item in seznam2:
seznam3.append(item[1])
seznam3
razeni_had(zvirata, dvojice, vysledek)
print(vysledek)
Co se asi stane, když takovou funkci zavoláme vícekrát?
zvirata = ['had', 'andulka', 'pes', 'kočka', 'králík']
dvojice = []
vysledek = []
def razeni_had(seznam1, seznam2, seznam3):
'''seřadí výchozí seznam1 podle abecedy, ale bude ignorovat první písmeno'''
for slovo in seznam1:
seznam2.append([slovo[1:], slovo])
seznam2.sort()
for item in seznam2:
seznam3.append(item[1])
seznam3
razeni_had(zvirata, dvojice, vysledek)
print(vysledek)
razeni_had(zvirata, dvojice, vysledek)
print(vysledek)
Nejsnazší je funkci prostě spustit s různými argumenty a podívat se, zda dělá to, co by dělat měla.
def absolutni_soucet(a, b):
if a < 0:
a = -a
if b < 0:
b = -b
return a + b
print(absolutni_soucet(1, 2))
print(absolutni_soucet(100, 200))
print(absolutni_soucet(-1, -2))
print(absolutni_soucet(-1, 2))
print(absolutni_soucet(100, -2))
Jde o techniku řešení problému, při které se svůj problém snažíte vysvětlit někomu (nebo v případě gumové kachny něčemu), kdo programování nemusí vůbec rozumět. Když řešenou problematiku a vaše současné řešení popisujete nahlas, uvědomíte si, co váš program aktuálně dělá a co by dělat měl, což zpravidla vede k vyřešení problému.