Cyklus `while` a řetězce  18. října 2023

Materiály

Nejste účastníkem kurzu
Pro zápis do kurzu se nejprve přihlašte a následně použijte tlačítko v přehledu kurzu.

Domácí projekty

0.

Napiš program, který se zeptá na dva řetězce a zjistí, jestli je jeden obsažen ve druhém. Nebere přitom ohled na velikost písmen.

1.

Napiš program, který se zeptá na příjmení uživatelky/uživatele a zkusí podle něj uhodnout její/jeho pohlaví. To pak vypíše.

(Pohlaví není podle jména možné určit přesně – stačí zvládnout ta nejčastější česká příjmení.)

2.

Najdi na internetu text své oblíbené písně, zkopíruj si ho do řetězce a zjisti, kolikrát je v něm použito písmeno K. (Velké nebo malé.)

Text by mělo jít jednoduše vyměnit za jiný.

Následující sada úkolů procvičuje různá použití cyklu for. Úkoly na sebe navazují, řeš je postupně.

3.

Pomocí cyklu for a funkce range() napiš program, který vypíše:

a
a
a
a
4.

Pomocí cyklu for napiš program, který vypíše:

Řádek 0
Řádek 1
Řádek 2
Řádek 3
Řádek 4
5.

Jak nejlépe pojmenovat proměnnou pro minulý příklad? Vymysli pro ni název, který nejlépe vystihuje, co proměnná obsahuje.

Je důležité proměnnou pojmenovat výstižně, jinak se v dalších úkolech můžeš ztratit.

6.

Pomocí cyklu for napiš program, který vypíše:

0 na druhou je 0
1 na druhou je 1
2 na druhou je 4
3 na druhou je 9
4 na druhou je 16

Jak pojmenuješ proměnnou cyklu?

7.

Pomocí cyklů for a parametru end pro print napiš program, který postupně z jednotlivých 'X' vypíše:

X X X X X
X X X X X
X X X X X
X X X X X
X X X X X

„Z jednotlivých 'X'“ znamená, že každý print vypíše maximálně jedno X. Nepoužívej tedy např. print('X X X X X') ani print('X ' * 5).

Jak pojmenuješ proměnnou cyklu? A tu druhou?

8.

Napiš program, který vypíše „tabulku“ s násobilkou.

0       0       0       0       0
0       1       2       3       4
0       2       4       6       8
0       3       6       9       12
0       4       8       12      16

K oddělení sloupců použij znak tabulátoru.

Tabulka je podobná předchozí, jen má v každé "buňce" hodnotu "číslo řádku × číslo sloupce".

9.

Napiš program, který postupně z jednotlivých 'X' vypíše:

X
X X
X X X
X X X X

„Z jednotlivých 'X'“ opět znamená, že každý print vypíše maximálně jedno X.

10.

Pomocí cyklu for a příkazu if napiš program, který vypíše následující řádky. Funkci print volej pouze uvnitř v cyklu:

první řádek
není první
není první
není první
11.

Pomocí cyklů for a příkazu if napiš program, který z jednotlivých 'X' vypíše:

X X X X X X
X         X
X         X
X         X
X         X
X X X X X X

„Z jednotlivých 'X'“ opět znamená, že každý print vypíše maximálně jedno X.

12.

Předchozí programy z této sekce uprav tak, aby počet řádků (či velikost čtverce/trojúhelníku/tabulky) mohl zadat uživatel.

Následující sada úkolů ti ukáže zajímavou vlastnost řetězců. Zpomal a zamysli se.

13.

Co dělá tenhle kód?

for c in 'Ahoj světe!':
    print(c)
14.

Vymyslíš lepší jméno pro proměnnou c z minulé úlohy?

15.

Co dělá tenhle kód?

for c in 38:
    print(c)
16.

Najdi na internetu text své oblíbené písně, zkopíruj si ho do řetězce a zjisti, kolik je v něm písmen. Nepočítej mezery, znaky nového řádku a znaky !"#$%&\'()*+,-./:;<=>?@[\]^_{|}~.

Text písně by mělo jít jednoduše vyměnit za jiný.

Postup:

  • Na začátku nastav počet nalezených písmen na 0.
  • Pro každý znak textu:
    • Když znak není obsažen v ! " # $ % & …:
      • Zvyš počet nalezených písmen o 1.
  • Vypiš počet nalezených písmen.

Máme tu i tradiční hru!

17.

Vytvoř hru Šibenice podle následujícího popisu.

  • Počítač náhodně zvolí slovo (zatím třeba ze tří možností). Pro jednoduchost používej malá písmena a nepoužívej slova, ve kterých se stejné písmeno opakuje dvakrát (třeba čokoláda).

    Zkus třeba slova: trávník, stromek, stavení.

  • Výchozí stav je řetězec s tolika podtržítky, kolik je ve vybraném slově písmen.

  • Výchozí počet neúspěšných pokusů je nula.

  • Stále dokola:

    • Zeptej se hráče na písmeno.
    • Pokud je to písmeno ve vybraném slově:
      • Zaměň ve stavu příslušné podtržítko za ono písmeno. (Bude se hodit řetězcová metoda index a podprogram zamen* ze srazu.)
    • Pokud dané písmeno není ve vybraném slově:
      • započítej neúspěšný pokus.
    • Vypiš stav (slovo s případnými podtržítky).
    • Pokud už ve stavu nejsou podtržítka:
      • Pogratuluj hráči.
      • Ukonči hru.
    • Vypiš počet neúspěšných pokusů.
    • Pokud je počet neúspěšných pokusů 9 (nebo víc):
      • Dej hráči najevo, že prohrál.
      • Ukonči hru.

* Podprogram zamen jsme si ukázali na srazu:

# Ve slově `slovo` zaměnit znak na pozici `pozice` za `novy_znak`;
# výsledek bude v proměnné `nove_slovo`.
zacatek = slovo[:pozice]
konec = slovo[pozice + 1:]
nove_slovo = zacatek + novy_znak + konec