feat: kata returns top 3 most used words test: test cases for kata

This commit is contained in:
Sandro Zimmermann 2026-04-20 20:55:22 +02:00
parent 1cab2e22fb
commit 20e345a9e9
2 changed files with 39 additions and 3 deletions

View File

@ -9,14 +9,19 @@ def top_3_words(text: str) -> list:
Returns:
list: [most used word, second most used word, third most used word]
"""
# remove invalid characters and replace with whitespace
text = "".join(
c if c.isalpha() or c.isdigit() or c in ("'", " ") else " " for c in text
) # remove invalid characters and replace with whitespace
)
text = text.split()
# remove word if it's just made of the character '
text = [w for w in text if w.strip("' ") != ""]
word_count = {}
for word in text:
word = word.lower()
if word in word_count:
word_count[word] += 1
else:
@ -30,9 +35,18 @@ def top_3_words(text: str) -> list:
for word in word_count:
if word_count[word] > top_3["first"]["amount"]:
top_3["third"]["word"] = top_3["second"]["word"]
top_3["third"]["amount"] = top_3["second"]["amount"]
top_3["second"]["word"] = top_3["first"]["word"]
top_3["second"]["amount"] = top_3["first"]["amount"]
top_3["first"]["word"] = word
top_3["first"]["amount"] = word_count[word]
elif word_count[word] > top_3["second"]["amount"]:
top_3["third"]["word"] = top_3["second"]["word"]
top_3["third"]["amount"] = top_3["second"]["amount"]
top_3["second"]["word"] = word
top_3["second"]["amount"] = word_count[word]
elif word_count[word] > top_3["third"]["amount"]:

View File

@ -1,5 +1,27 @@
from src.codewars.kata_most_words_used import top_3_words
import pytest
def test_top_3_words():
assert top_3_words() == 0
@pytest.mark.parametrize(
("input", "expected"),
[
("a a a b c c d d d d e e e e e", ["e", "d", "a"]),
("e e e e DDD ddd DdD: ddd ddd aa aA Aa, bb cc cC e e e", ["e", "ddd", "aa"]),
(" //wont won't won't ", ["won't", "wont"]),
(" , e .. ", ["e"]),
(" ... ", []),
(" ' ", []),
(" ''' ", []),
(
"""In a village of La Mancha, the name of which I have no desire to call to
mind, there lived not long since one of those gentlemen that keep a lance
in the lance-rack, an old buckler, a lean hack, and a greyhound for
coursing. An olla of rather more beef than mutton, a salad on most
nights, scraps on Saturdays, lentils on Fridays, and a pigeon or so extra
on Sundays, made away with three-quarters of his income.""",
["a", "of", "on"],
),
],
)
def test_top_3_words(input, expected):
assert top_3_words(input) == expected