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

Úkol - kopírování souborů

Začátek programu (varianty, kdy soubor je ve složce, ze které spouštíš soubor *.py)

In [ ]:
nazev_souboru = input("Zadej název souboru ke zkopírování: ")
nazev_noveho_souboru = input("Zadej název pro nový soubor: ")

Varianta bez with

In [ ]:
soubor = open(nazev_souboru, mode="r", encoding='utf-8')
novy_soubor = open(nazev_noveho_souboru, mode="w", encoding='utf-8')

for text in soubor:
    novy_soubor.write(text) 
    
# NEBO
# text = soubor.read()
# novy_soubor.write(text)

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

soubor.close()
novy_soubor.close()

Varianta s with

In [ ]:
with open(nazev_souboru, mode="r", encoding='utf-8') as soubor:
    with open(nazev_noveho_souboru, 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())

Jiný způsob, kdy jsou všechny obrázky uloženy dohromady v souboru obrazky.txt

In [ ]:
def nakresli_panacka(neuspech_pokusy):
    with open("obrazky.txt", mode="r", encoding="utf-8") as soubor:
        obrazky = soubor.read()

    start_hledani = 0
    start_index = 0
    poradi_obrazku = 0
    while True:
        index = obrazky.index("------------------", start_hledani)
        poradi_obrazku += 1
        start_hledani = index + 1
        if poradi_obrazku == neuspech_pokusy - 1:
            start_index = index
        if poradi_obrazku == neuspech_pokusy:
            break

    print(obrazky[start_index+19:index])


neuspech_pokusy = 10
nakresli_panacka(neuspech_pokusy)

Š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ří odevzdávají bonusové úkoly
  • Pochvala všem, kteří neví a ptají se
  • Když se neptáte, tak vám nemůžeme poradit

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