Bardzo popularnym zadaniem, szlifującym nasz język, jest program do analizy ciągu znaków, czyli przykładowo zliczenia liczby słów czy też znaków.
Mamy podany ciąg S. Np „Ala ma kota”. W ramach zadania możemy zostać poproszeni o jedno, lub więcej z poniższych:
1. zliczyć wyrazy. W naszym przypadku będzie ich 3
2. zliczyć litery. Będzie ich 9
3. zbadać częstotliwość występowania liter. a – 3, l – 1, m 1, k – 1, t – 1
Rozwiązanie.
Niezależnie który z powyższych punktów adresujemy, potrzebujemy pętli For, która pozwoli nam przeanalizować literę po literze. Następnie:
1 Zliczanie wyrazów.
Wyrazy rozpoznamy po tym że są oddzielone spacjami. Możemy również założyć, że zdanie nie będzie się, ani zaczynać, ani kończyć spacją, a będą one występować tylko w środku zdania. Na naszym przykładzie widzimy że są 2, Wyrazów będzie zawsze o 1 więcej niż spacji.
2. Zliczanie liter.
Literami będzie wszystko to co nie jest spacją. Tak więc 1 i 2 możemy adresować bardzo prosto. Jeżeli spacja, to mamy do czynienia ze słowem, jeżeli to nie jest spacja, to mamy do czynienia z literą.
3. Częstotliwość występowania liter.
Punkt 3 jest trudniejszy niż 1 i 2, jednak również bardzo prosty jak tylko dowiemy się o ‘hash table’, czyli tablicy z haszowaniem.
Jest to nic innego, jak słownik, który przechowuje jako klucz, daną literkę, natomiast jako wartość, ilość razy jaką się na nią natknęliśmy. O słownikach możemy poczytać więcej w lekcji o zmiennych w Python, oraz w lekcji na temat operacji na zmiennych Python.
Za każdym razem gdy mamy do czynienia z literą, sprawdzamy jej występowanie w tablicy z haszowanie. Jeżeli jej tam nie ma, to ją dodajemy, po czym stawiamy licznik 1.
hash_table [‘litera’] = 1
Jeżeli litera występuje w tablicy, to zwiększamy licznik
hash_table [‘litera’] += 1
Tablica z haszowaniem sprawia że zadanie staje się proste.
Przykładowy kod, z rozwiązaniem:
string = "ABC for the purpose of LetterCounting program" print(string) words = 1 letters 0 hash_table = {} for char in string: char = char.lower() if char == ' ': words+=1 else: letters+=1 if char in hash_table: hash_table[char]+=1 else: hash_table[char]=1 print("Words:", words, "Letters:", letters, "Freq:", hash_table)
Ćwiczenia Python, dla początkujących
- Wstęp do kursu
- FizzBuzz
- Najmniejsza i największa liczba
- Zliczanie liter <– bieżąca lekcja
- Sortowanie bąbelkowe
- Suma dwóch liczb
- Wyszukiwanie binarne
- Gra w orła i reszkę
- Podsumowanie oraz dalsze kroki