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 [4]:
def nahrazeni_pismene(hr_pole, slovo, pismeno):
    pocatek = 0
    for pocet in range(slovo.count(pismeno)):
        misto = slovo.index(pismeno, pocatek)
        hr_pole = hr_pole[:misto] + pismeno + hr_pole[misto + 1:]  
        pocatek = misto + 1
    return hr_pole

slovo = "ukulele"
hr_pole = len(slovo) * "-"
pismeno = "e"

print(hr_pole)
hr_pole = nahrazeni_pismene(hr_pole, slovo, pismeno)
print(hr_pole)
-------
----e-e

Obecné rady, pochvaly a doporučení

  • Pochvala všem, kteří odevzdávají úkoly a to i zpětně
  • Pochvala všem, kteří neví a ptají se (samozřejmě chápeme, že někteří z vás mají doma vlastního poradce)
  • Když se neptáte, tak vám nemůžeme poradit
  • Trochu statistiky: aktuálně 25 účastníků kurzu, 11 odevzdalo aspoň 1 úkol, úspěšnost odevzdaných úkolů 60 % a 27 %

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