Commit 8e4128d2 by Patryk Czarnik

policz jedno słowo

parent 19e067d2
# Użytkownik podaje jakieś słowo
# a program oblicza ile razy to słowo występuje w pliku pan-tadeusz.txt
import re
szukane = input('Podaj szukane słowo: ')
pattern = re.compile(r'\w+')
nr = 0
with open('pan_tadeusz.txt', mode='r', encoding='utf-8') as plik:
for linia in plik:
for slowo in re.findall(pattern, linia):
if slowo == szukane:
nr += 1
print(f'Szukane słowo {szukane} występuje {nr} razy.')
# W tej wersji szukane słowo umieszczamy w wyrażeniu regularnym.
# Aby powiedzieć, że ma być to całe słowo, umieszczamy między znacznikiem \b oznaczającym "granicę słów"
# Aby znaki specjalne wprowadzone przez usera utraciły swoje specjalne znaczenie, korzystamy z funkcji escape
# (zasada przypominająca zapobieganie SQL injection).
import re
szukane = input('Podaj szukane słowo: ')
pattern = re.compile(r'\b' + re.escape(szukane) + r'\b')
nr = 0
with open('pan_tadeusz.txt', mode='r', encoding='utf-8') as plik:
for linia in plik:
for slowo in re.findall(pattern, linia):
nr += 1
print(f'Szukane słowo {szukane} występuje {nr} razy.')
# Wersja, która nie rozróżnia małych / dużych liter
import re
szukane = input('Podaj szukane słowo: ').lower()
pattern = re.compile(r'\w+')
nr = 0
with open('pan_tadeusz.txt', mode='r', encoding='utf-8') as plik:
for linia in plik:
for slowo in re.findall(pattern, linia):
if slowo.lower() == szukane:
nr += 1
print(f'Szukane słowo {szukane} występuje {nr} razy.')
# W tej wersji do podziału każdej linii na słowa wykorzystamy wyrażenia regularne. # W tej wersji do podziału każdej linii na słowa wykorzystamy wyrażenia regularne.
# Teoretycznie można by wczytać całuy plik za pomocą read() i dopiero podzielić na słowa, # Teoretycznie można by wczytać cały plik za pomocą read() i dopiero podzielić na słowa,
# ale zwn wydajność prefereujemy przetwarzanie linia za linią, stąd dwupoziomowa pętla. # ale zwn wydajność preferujemy przetwarzanie linia za linią, stąd dwupoziomowa pętla.
# Również zwn na wydajność lepiej jest najpierw "skompilować" wyrażenie regularne, a później używać wersji skompilowanje, tzw. "patternu". # Również zwn na wydajność lepiej jest najpierw "skompilować" wyrażenie regularne, a później używać wersji skompilowanej, tzw. "patternu".
# Dotyczy to sytuacji, gdy to samo wyrażneie jest używane wielokrotnie, np. w pętli. # Dotyczy to sytuacji, gdy to samo wyrażenie jest używane wielokrotnie, np. w pętli.
import re import re
# znaczenie wzorca: nieputy ciąg znaków typu 'w', co obejmuje litery (wszelkich alfabetów), cyfry i znak _ # znaczenie wzorca: niepusty ciąg znaków typu 'w', co obejmuje litery (wszelkich alfabetów), cyfry i znak _
pattern = re.compile(r'\w+') pattern = re.compile(r'\w+')
nr = 0 nr = 0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment