Pro druhou úlohu se vám bude hodit následující funkce na hledání prvočísel. Jako parametr bere jedno číslo a vrací seznam všech prvočísel menších než to číslo. Je na vás, jestli a jak ji použijete. Nemusíte ji chápat, ačkoliv je to určitě ve vašich silách.

def prvocisla(n):
    vysledek = list()
    for cislo in range(2, n):
        je_prvocislo = True
        for delitel in range(2, cislo):
            if cislo % delitel == 0:
                je_prvocislo = False
                break
        if je_prvocislo:
            vysledek.append(cislo)
    return vysledek

Skupina A (u okna a pak třetí od kraje)

A1. Číslice (4b.)

Spočítejte, kolik je pětek v desítkovém zápisu čísla 7777.

Řešení.
pocet = 0
for znak in str(7**777):
    if znak == '5':
        pocet += 1

print(pocet)
# nebo
sum(znak == '5' for znak in str(7**777))

A2. Prvočísla (6b.)

Najděte dvě prvočísla, mezi kterými je rozdíl 202. Můžete přitom použít výše napsanou funkci prvocisla(n), která vám vrátí seznam všech prvočísel menších než n.

Řešení.
seznam = prvocisla(300)
for i in seznam:
    for j in seznam:
        if i - j == 202:
            print(i, j)
# taky to jde na jeden řádek, ale tohle jsme neprobírali
[(i, j) for i in seznam for j in seznam if i - j == 202]

Mimochodem, kdybychom hledali dvě po sobě jdoucí prvočísla, nejmenší taková jsou 107534587 a 107534789.

A3. Text (6b.)

Spočítejte, kolik je v textu slov dlouhých přesně čtyři písmena (ani delší, ani kratší). Text stáhněte (znovu) zde; tentokrát v něm není interpunkce, takže není co řešit.

Řešení.
f = open("test18-mp.txt", encoding="utf-8")
text = f.read()
pocet = 0
for slovo in text.split():
if len(slovo) == 4:
        pocet += 1

print(pocet)
# taky to jde na jeden řádek, ale už je to tak dlouhé, že by se to dělat asi nemělo
sum(len(slovo) == 4 for slovo in open("test18-mp.txt", encoding="utf-8").read().split())

Skupina B (druhý od okna a od kraje)

B1. Číslice (4b.)

Spočítejte, kolik je sedmiček v desítkovém zápisu čísla 8888.

Řešení.
pocet = 0
for znak in str(8**888):
    if znak == '7':
        pocet += 1

print(pocet)

B2. Prvočísla (6b.)

Najděte dvě prvočísla, mezi kterými je rozdíl 532. Můžete přitom použít výše napsanou funkci prvocisla(n), která vám vrátí seznam všech prvočísel menších než n.

Řešení je stejné jako u skupiny A, jen změníte jedno číslo.

B3. Text (6b.)

Spočítejte, kolik je v textu slov, která neobsahují písmeno a (za slovo se počítá cokoliv oddělené mezerami nebo koncem řádku, takže i třeba čísla). Text stáhněte (znovu) zde; tentokrát v něm není interpunkce, takže není co řešit.

f = open("test18-mp.txt", encoding="utf-8")
text = f.read()
pocet = 0
for slovo in text.split():
if 'a' not in slovo:
        pocet += 1

print(pocet)

Skupina C (třetí od okna a hned na kraji)

C1. Číslice (4b.)

Spočítejte, kolik je čtyřek v desítkovém zápisu čísla 9999.

Řešení.
pocet = 0
for znak in str(9**999):
    if znak == '4':
        pocet += 1

print(pocet)

C2. Prvočísla (6b.)

Najděte dvě prvočísla, mezi kterými je rozdíl 114. Můžete přitom použít výše napsanou funkci prvocisla(n), která vám vrátí seznam všech prvočísel menších než n.

Řešení je stejné jako u skupiny A, jen změníte jedno číslo. Mimochodem, kdybychom hledali dvě po sobě jdoucí prvočísla, můžou to být třeba 492113 a 492227.

C3. Text (6b.)

Spočítejte, kolik je v textu slov, která obsahují písmeno p (i kdyby tam bylo víckrát, počítejte každé slovo jen jednou). Text stáhněte (znovu) zde; tentokrát v něm není interpunkce, takže není co řešit.

f = open("test18-mp.txt", encoding="utf-8")
text = f.read()
pocet = 0
for slovo in text.split():
if 'p' in slovo:
        pocet += 1

print(pocet)