k najczęstszych słów
Treść zadania
Wczytaj liczbę $k$ i tekst. Znajdź $k$ słów, które występują w tekście najczęściej.
Słowa wyznaczamy tak:
- wielkość liter nie ma znaczenia — cały tekst zamień na małe litery,
- słowo to ciąg kolejnych liter (znaków, dla których
znak.isalpha()jest prawdą, także polskich); wszystkie inne znaki — spacje, cyfry, znaki interpunkcyjne — rozdzielają słowa.
Słowa uporządkuj według liczby wystąpień malejąco, a przy równej liczbie wystąpień — alfabetycznie (rosnąco, według kodów Unicode). Wypisz pierwsze $k$ słów z tej kolejności. Jeśli różnych słów jest mniej niż $k$, wypisz wszystkie.
Dane wejściowe
- 1. linia: liczba całkowita $k$
- 2. linia: tekst (zawiera co najmniej jedno słowo)
Dane wyjściowe
Co najwyżej $k$ linii, każda w postaci <słowo> <liczba wystąpień>.
Ograniczenia
- $1 \le k \le 50$
- Tekst ma co najwyżej 1000 znaków.
Uwagi
- Słowa wydzielisz bez wyrażeń regularnych: zamień każdy znak, który nie jest literą, na spację, a potem użyj
split(). Counterz modułucollectionszlicza wystąpienia:Counter(["a", "b", "a"])dajeCounter({'a': 2, 'b': 1}), a.items()zwraca pary(słowo, liczba).- Metoda
most_common()przy remisie zachowuje kolejność pierwszego wystąpienia, a nie alfabetyczną — dlatego posortuj pary samodzielnie:sorted(licznik.items(), key=lambda p: (-p[1], p[0])).
Przykład
3 Ala ma kota, a kot ma Alę. Ala ma też psa!
ma 3 ala 2 a 1
Słowo ma występuje 3 razy, ala — 2 razy, a sześć słów występuje po razie: a, alę, kot, kota, psa, też. Spośród nich alfabetycznie pierwsze jest a.
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 22
Zadania w tym rozdziale pokazują, jak sortować w praktyce: napisy, słowa, pary, obiekty — często według własnego kryterium. Tutaj wolno (a nawet warto) korzystać z wbudowanych narzędzi Pythona: sorted(), list.sort() i parametru key=.
Konwencje wspólne:
- Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
- Jeśli wejściem jest napis — wczytaj całą linię (łącznie ze spacjami).
- Jeśli wejściem jest lista — najpierw podana jest liczba elementów $N$, a potem elementy (w jednej linii albo w kolejnych liniach — zależnie od zadania).
- Napisy porównujemy tak jak Python, czyli według kodów znaków Unicode: wielkie litery są „mniejsze” od małych (
'Z' < 'a'), a polskie litery są „większe” od wszystkich liter alfabetu łacińskiego ('z' < 'ą'). - Sortowanie w Pythonie (
sorted(),list.sort()) jest stabilne: elementy równe według kryterium sortowania zachowują kolejność z wejścia. Korzystają z tego zadania, w których mogą wystąpić remisy. - Program nie wypisuje komunikatów typu „Podaj liczbę:”.
Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.
Przywrócono Twój zapisany kod.
Python uruchomi się w przeglądarce przy pierwszym teście.
Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.
Testy
Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.
Test 1
Nie uruchomiono1 słowo
słowo 1
Test 2
Nie uruchomiono5 To be, or not to be
be 2 to 2 not 1 or 1
Test 3
Nie uruchomiono2 Kot KOT kot! kOt? pies PIES
kot 4 pies 2
Test 4
Nie uruchomiono3 żaba zebra żaba ąb zebra aa
zebra 2 żaba 2 aa 1
Test 5
Nie uruchomiono2 R2D2 i C3PO to roboty, a R2 to robot
r 2 to 2