Kategorie
100 days of code python

100 days of code challenge- day3. „Leniwy” piątek i program liczący słowa

Cześć! Dziś relacja z dnia 3!
🕑🕑🕑
Dzisiejszy czas nauki = 30 minut
Łączny czas nauki = 7,5 godziny

Wczoraj dużo się działo i wrzuciłem tylko relacje na instagram. Dziś wracam na blog, żeby nadrobić wpis za ten dzień. Oraz jak zwykle podaje ci dostęp do zaktualizowanych notatatek.

Dzisiaj był piątek i w piątki często miewam więcej pracy. Dodatkowo przed pracą byłem też zobaczyć centrum robotyki Baltic Bot. Znajduję się ono w Pruszczu Gdańskim i prowadzi je moja koleżanka, która chciała mi pokazać, czym się obecnie zajmuje. Zapomniałam jej zapytać jak dużo mogę o tym wspomnieć, dlatego opowiem tylko pokrótce co tam zobaczyłem.

Ogólnie jest to super miejsce dla dzieci młodzieży do nauki robotyki w przestronnym i dobrze wyposażonym miejscu. Znajdą się tam takie rzeczy jak masa elektroniki inteligentne płytki Arduino, raspberry pi i NVIDIA Jetson, jak i roboty na nich oparte. Dodatkowo znajdują się tam też LEGO roboty z silnikami i czujnikami. Także można tam spotkać drukarki 3D i laserowe grawerowanie. Pokazała mi też zawody robotów, w których uczestnicy zajęć konkurują oraz ich wyniki. Często są to zawody ogólnoświatowe a dzieci spod skrzydeł Ani zajmują zazwyczaj najwyższe miejsca ⚡ Szał! 👏

Dlatego po tych wszystkich aktywnościach zostało mi niewiele czasu oraz sił tego dnia. Postanowiłem więc dzisiaj wykorzystać absolutne minimum i w tym czasie napisać krótki program, który będzie potrafił otworzyć plik tekstowy policzyć zawarte w nim słowa oraz wypisać słowo, które najczęściej się pojawia oraz liczbę jego powtórzeń.

Jest to prosty program i pewnie dałoby się go napisać w 2 minuty. Jednak popełniłem kilka błędów przy jego pisaniu i musiałam wracać do notatek co zajęło mi więcej czasu. No ale cóż, myślę że jest to koszt tego, by się nauczyć. Program prezentuje na dole a pod kodem napiszę mniej więcej co się w nim dzieje:

file_name = input("enter name of file: ")
file_handle = open(file_name)

dict_of_words = {}
for line in file_handle:
    line = line.rstrip()
    words = line.split()
    for word in words:
        dict_of_words[word] = dict_of_words.get(word, 0) + 1

the_most_common_word = None
the_number_of_the_word = 0
for key, value in dict_of_words.items():
    if value == 0 or value > the_number_of_the_word:
        the_number_of_the_word = value
        the_most_common_word = key
print(the_most_common_word, the_number_of_the_word)

Okej. Pierwsza część jest chyba całkiem prosta, bo po prostu tworzę zmienną, która przyjmuje wartość wpisaną przez użytkownika (nazwę pliku), oraz go „otwiera”. Przy tej okazji mogę opowiedzieć mniej więcej jak działa otwieranie plików w pythonie. Otóż program nie otwiera pliku w takim sensie jak zazwyczaj się to dzieje, tylko taki jakby pomocnik otrzymuje dostęp do tego pliku (tutaj nazywany tego pomocnika zmienną file_handle)

Ciekawostka nr 2 – w programowaniu zazwyczaj używamy angielskich nazw zmiennych. Jeśli jakaś zmiana jest wielo wyrazowa to jest kilka sposobów na jej zapisanie. Wyjaśniam to w osobnym wpisie. [wpis w trakcie produkcji 😉]

W dalsze części kodu tworzę pusty słownik, wktórym będę magazynował każde występujące słowo jako klucz i liczył ilość jego powtórzeń jako wartość danego klucza w słowniku. Używam do tego pętli for, w której dziele cały plik na poszczególne linie (skrócone wcześniej o białe spacje). Następnie używam jeszcze raz pętli for do podzielenia danej linijki na pojedyncze słowa oraz zliczenie liczby ich występowania.

W ostatnim bloku kodu tworze dwie zmienne, których użyje by wybrać najpopularniejsze słowo oraz liczbę jego powtórzeń używając pętli for raz jeszcze oraz czegoś, co nazywa się podwójną iteracją. Robię to z wykorzystaniem metody słowników .items(), która zwraca pary: klucz, wartość. I teraz sprawdzam która z tych wartości jest największa. Dla tej wartości też zapisuje do zmiennej jej klucz (czyli dany wyraz), którą wywołam na samym końcu. Napisze mi to pożądane, najczęściej występujące słowo oraz ilość jego powtórzeń.

Program nie wyczerpuje wszystkich problemów, które mogą wystąpić -jestem ich świadomy ale celowo nie zawarłem ich w tym programie, bo chciałem go wykorzystać tylko w celach ćwiczenia. Takimi błędami które mogłoby się pojawić to:

  • źle podana nazwa pliku przez użytkownika (tutaj można zrobić try/except, który ewentualny błąd zwróci użytkownikowi). Można to też zamknąć w pętli while która pozwoli wpisywać nazwę pliku tak długo aż poda się poprawną.
  • Nadmierne przecinki- w moim programie python dzieli dane słowa na tej zasadzie że spodziewa się spacji między słowami i wyraz który jest po lewej jak i po prawej stronie spacji jest uznawany jako pojedyncze słowo. W związku z tym jeżeli będzie słowo po którym używa się przecinku będzie ono uznawane jako słowa na tej zasadzie „który,”. Może to spowodować że zliczona ilość powtórzeń słowa będzie błędna, gdyż nie wszędzie potrzeba stosować przecinek przy niektórych słowach lub autor tekstu może zapomnieć o przecinku pomniejszać zliczenia danego słowa.
  • Python zlicza słowa jako ciąg znaków. Jednak rozróżnia w tym wielkie i małe litery. Dlatego przykładowe słowo „który” oraz „Który”, który jest tym samym słowem, będzie przez pythona uznawany za dwa różne słowa. Żeby temu zapobiec możnaby zrobić coś jak w pętli for do każdego słowa dodać .lowercase().

To było kilka przykładów. Jeśli chcesz się sprawdzić, możesz skopiować mój kod do siebie i spróbować poprawić wyżej wymienione błędy! 😀
A może jest jakiś błąd, o którym nie pomyślałem? Chętnie zobaczę go w komentarzu!😉

Myślę że w tym wpisie byłoby to wszystko. Dziękuję jeszcze raz za twoją obecność tutaj. Zapraszam Cię raz jeszcze na mój instagram. I życzę ci powodzenia w twoich projektach.
May the code be with you 🥳

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *