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

Feedback k domácím projektům

Zvířátka

Najdi chyby, nejasnosti či nepřesnosti v tomto kódu:

In [3]:
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))
Zadej zvíře: ježek
False

Po úpravě:

In [4]:
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))
Zadej zvíře: ježek
False

Je možné tuto funkci ještě zkrátit a zjednodušit?

In [8]:
def je_v_seznamu(zvirata, zvire):
    return zvire in zvirata

zvirata = ["pes", "kočka", "králík", "had", "andulka", "želva"]
zvire = input("Zadej zvíře: ")
print(je_v_seznamu(zvirata, zvire))
Zadej zvíře: ježek
False

Další podobná funkce:

In [1]:
def kratke(jmeno = zvirata):
    for i in range(len(jmeno)):
        if len(jmeno[i]) < 5:
            print(jmeno[i])
        else:
            print(end = "")
    return jmeno

zvirata = ["pes", "kočka", "králík", "had"]
kratke(zvirata)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-6509de98d3ec> in <module>
----> 1 def kratke(jmeno = zvirata):
      2     for i in range(len(jmeno)):
      3         if len(jmeno[i]) < 5:
      4             print(jmeno[i])
      5         else:

NameError: name 'zvirata' is not defined

A její přehlednější varianta:

In [9]:
def kratke(seznam):
    novy_seznam = []
    for zvire in zvirata:
        if len(zvire) < 5:
            novy_seznam.append(zvire)
    return novy_seznam

zvirata = ["pes", "kočka", "králík", "had"]
print(kratke(zvirata))
['pes', 'had']

Básnička

Obrácené pořadí veršů

In [10]:
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)
Anyway the wind blows doesn't really matter to me, to me.
Little high, little low,
Because I'm easy come, easy go,
I'm just a poor boy, I need no sympathy,
Look up to the skies and see,
Open your eyes,

No escape from reality.
Caught in a landslide,
Is this just fantasy?
Is this the real life?
In [11]:
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="")
Anyway the wind blows doesn't really matter to me, to me.
Little high, little low,
Because I'm easy come, easy go,
I'm just a poor boy, I need no sympathy,
Look up to the skies and see,
Open your eyes,

No escape from reality.
Caught in a landslide,
Is this just fantasy?
Is this the real life?

Obrácené pořadí slov ve verších

In [12]:
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)
life? real the this Is
fantasy? just this Is
landslide, a in Caught
reality. from escape No

eyes, your Open
see, and skies the to up Look
sympathy, no need I boy, poor a just I'm
go, easy come, easy I'm Because
low, little high, Little
me. to me, to matter really doesn't blows wind the Anyway

In [13]:
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))
life? real the this Is
fantasy? just this Is
landslide, a in Caught
reality. from escape No

eyes, your Open
see, and skies the to up Look
sympathy, no need I boy, poor a just I'm
go, easy come, easy I'm Because
low, little high, Little
me. to me, to matter really doesn't blows wind the Anyway

Obrácené pořadí slok

In [14]:
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)
Open your eyes,
Look up to the skies and see,
I'm just a poor boy, I need no sympathy,
Because I'm easy come, easy go,
Little high, little low,
Anyway the wind blows doesn't really matter to me, to me.

Is this the real life?
Is this just fantasy?
Caught in a landslide,
No escape from reality.

Slova v náhodném pořadí

In [3]:
from random import shuffle


with open("static/basnicka.txt", mode="r", encoding="utf-8") as file:
    basnicka = file.read()

# Analýza básničky
pocet_slok = len(basnicka.split("\n\n"))
sloky = basnicka.split("\n")
pocet_versu = len(sloky)
for vers in sloky:
    if not vers:
        pocet_versu -= 1

# Zásobník slov z původní básně
slova = basnicka.split()
shuffle(slova)

# Tvorba nové básně ze zamíchaných slov
basen = []

while slova:
    for radek in range(pocet_versu):
        slovo = slova.pop()
        try:
            basen[radek].append(slovo)
        except IndexError:
            basen.append(list())
            basen[radek].append(slovo)
        if not slova:
            break

for index, radek in enumerate(basen):
    vers = " ".join(radek)
    basen[index] = vers
    if (index + 1) % (pocet_versu / pocet_slok) == 0:
        basen[index] += "\n"

basen = "\n".join(basen)

print(basen)
me, life? landslide, I this to
low, go, eyes, and a Is
the boy, easy see, blows to
the me. this Because Look sympathy,
just I'm easy I'm wind from

doesn't fantasy? your escape need Is
the to really come, real reality.
little high, a poor No
Open Caught up in skies
Anyway no Little just matter

Rubber duck problem solving

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.


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