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

Feedback k domácím projektům

Použití with

  • with nám může ušetřit práci i starosti s přemýšlením nad uzavřením otevřeného souboru
  • čtení celého souboru nemusíme dělat jen přes cyklus for, ale můžeme jej přečíst celý najednou metodou .read()
In [ ]:
soubor = open("soubor.txt", mode="r", encoding='utf-8')
novy_soubor = open("soubor2.txt", mode="w", encoding='utf-8')

for text in soubor:
    novy_soubor.write(text) 

print ("Soubor zkopírován.")

soubor.close()
novy_soubor.close()
In [ ]:
with open("soubor.txt", mode="r", encoding='utf-8') as soubor:
    with open("soubor2.txt", mode="w", encoding='utf-8') as novy_soubor:
        novy_soubor.write(soubor.read()) 
print ("Soubor zkopírován.")

Ukázkový příklad porušení DRY

Proč se tolik opakovat, když můžeme počet pokusů použít přímo, převést jej na řetězec a jen připojením přípony z něj udělat název souboru?

In [ ]:
def vykresliPanacka(pocet_pokusu):
    "Funkce na základě neúspěšných pokusů vypisuje obrázky, dokud hra neskončí."
    if pocet_pokusu == 1:
        vstup=open("1.txt", encoding='utf-8')
        obrazek = vstup.read()
        print(obrazek)
        vstup.close()
    elif pocet_pokusu == 2:
        vstup=open("2.txt", encoding='utf-8')
        obrazek = vstup.read()
        print(obrazek)
        vstup.close()
    elif pocet_pokusu == 3:
        vstup=open("3.txt")
        obrazek = vstup.read()
        print(obrazek)
        vstup.close()
    elif pocet_pokusu == 4:
        vstup=open("4.txt")
        obrazek = vstup.read()
        print(obrazek)
        vstup.close()
    elif pocet_pokusu == 5:
        vstup=open("5.txt")
        obrazek = vstup.read()
        print(obrazek)
        vstup.close()
    elif pocet_pokusu == 6:
        vstup=open("6.txt")
        obrazek = vstup.read()
        print(obrazek)
        vstup.close()
    elif pocet_pokusu == 7:
        vstup=open("7.txt")
        obrazek = vstup.read()
        print(obrazek)
        vstup.close()
    elif pocet_pokusu == 8:
        vstup=open("8.txt")
        obrazek = vstup.read()
        print(obrazek)
        vstup.close()
    elif pocet_pokusu == 9:
        vstup=open("9.txt")
        obrazek = vstup.read()
        print(obrazek)
    else:
        vstup=open("10.txt")
        obrazek = vstup.read()
        print(obrazek)
        vstup.close()
        print ("Konec hry, prohrál jsi!")
In [ ]:
def vykresliPanacka(pocet_pokusu):
    "Funkce na základě neúspěšných pokusů vypisuje obrázky, dokud hra neskončí."
    with open(str(pocet_pokusu) + ".txt", encoding='utf-8') as soubor:
        print(soubor.read())

Šibenice a vyplnění jednoho znaku do hádaného slova

In [5]:
def vyplnZnak(hadanka, znak, tajneSlovo):
    for index in range(len(tajneSlovo)):
        if znak == tajneSlovo[index]:
            hadanka = hadanka[:index] + znak + hadanka[index + 1:]
    return hadanka

Drobnosti

  • Dokumentační řetězce se píšou hned pod název funkce a nikde jinde
  • Nepoužívat kapitálky pro názvy proměnných. Většinou to není potřeba.
  • Soubor nemusí mít příponu a rozhodně to nemusí být vždy .txt
  • Používání knihoven pro kopírování souborů nebylo cílem, ale snaha se cení.

Martinovy prosby

  • Nebalte do archívů každou úlohu zvlášť. Jeden archiv bohatě postačí.
  • Neposílejte nám složky s virtuálním prostředím.

Obecné rady, pochvaly a doporučení

  • Velká pochvala za úkoly na githubu
  • Pochvala za hledání pomoci na internetu a používání nových věcí
  • Pochvala těm, kdo měli obrázky šibenice a japonské abecedy ve zvláštním souboru a ne přímo v kódu
  • Pochvala za psaní komentářů k funkcím a složitějšímu kódu

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