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
Spočítejte, kolik je pětek v desítkovém zápisu čísla 7777.
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))
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.
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.
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())
Spočítejte, kolik je sedmiček v desítkovém zápisu čísla 8888.
pocet = 0
for znak in str(8**888):
if znak == '7':
pocet += 1
print(pocet)
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.
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)
Spočítejte, kolik je čtyřek v desítkovém zápisu čísla 9999.
pocet = 0
for znak in str(9**999):
if znak == '4':
pocet += 1
print(pocet)
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.
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)