From b11ca22119a9216ffcd69ed6bf25886391b3c99b Mon Sep 17 00:00:00 2001 From: schaermicha1 Date: Fri, 13 Mar 2026 19:06:10 +0100 Subject: [PATCH 1/5] train kata "Who likes it?" --- src/codewars/WhoLikesIt.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/codewars/WhoLikesIt.py diff --git a/src/codewars/WhoLikesIt.py b/src/codewars/WhoLikesIt.py new file mode 100644 index 0000000..8324a7f --- /dev/null +++ b/src/codewars/WhoLikesIt.py @@ -0,0 +1,26 @@ +def likes(names): + length = len(names[:4]) + + match length: + case 0: + return "no one likes this" + case 1: + return f"{names[0]} likes this" + case 2: + return f"{names[0]} and {names[1]} like this" + case 3: + return f"{names[0]}, {names[1]} and {names[2]} like this" + case _: + return f"{names[0]}, {names[1]} and {len(names) - 2} others like this" + + +if __name__ == "__main__": + assert likes([]) == "no one likes this" + assert likes(["Peter"]) == "Peter likes this" + assert likes(["Jacob", "Alex"]) == "Jacob and Alex like this" + assert likes(["Max", "John", "Mark"]) == "Max, John and Mark like this" + assert ( + likes(["Alex", "Jacob", "Mark", "Max"]) == "Alex, Jacob and 2 others like this" + ) + + print("All tests passed!") -- 2.30.2 From 323687c00debb0b8637a1c40a401c54c4819729a Mon Sep 17 00:00:00 2001 From: schaermicha1 Date: Fri, 13 Mar 2026 19:32:01 +0100 Subject: [PATCH 2/5] train kata "Pandas Tutorial" --- src/codewars/PandasTutorial.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/codewars/PandasTutorial.py diff --git a/src/codewars/PandasTutorial.py b/src/codewars/PandasTutorial.py new file mode 100644 index 0000000..0567f8d --- /dev/null +++ b/src/codewars/PandasTutorial.py @@ -0,0 +1,20 @@ +import pandas as pd + + +def export_csv_with_name_and_grade(student_name: str, grade: str): + students_df = pd.read_csv("files/students.csv", index_col=False) + grades_df = pd.read_csv("files/grades.csv", index_col=False) + + print(students_df) + print(grades_df) + + students_grades_df = students_df.merge( + grades_df, left_on="Student_ID", right_on="ID" + ) + + solution = students_grades_df[ + (students_grades_df["Name"] == student_name) + & (students_grades_df["Grade"] == grade) + ] + + solution[["Student_ID", "Class"]].to_csv("files/output.csv", index=False) -- 2.30.2 From d0609303dc7caa62e933188d4bf2b61258f683e9 Mon Sep 17 00:00:00 2001 From: schaermicha1 Date: Fri, 13 Mar 2026 20:57:09 +0100 Subject: [PATCH 3/5] train kata "Simple Web Framework" --- src/codewars/SimpleWebFramework.py | 54 ++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/codewars/SimpleWebFramework.py diff --git a/src/codewars/SimpleWebFramework.py b/src/codewars/SimpleWebFramework.py new file mode 100644 index 0000000..dd111de --- /dev/null +++ b/src/codewars/SimpleWebFramework.py @@ -0,0 +1,54 @@ +import typing + + +class Router(object): + + def __init__(self): + self.routes = {} + + def bind(self, path: str, method: str, func: typing.Callable): + self.routes[(path, method)] = func + + def run_request(self, path: str, method: str): + return self.routes.get((path, method), lambda: "Error 404: Not Found")() + + +if __name__ == "__main__": + # Should handle GET routes' + router = Router() + router.bind("/hello", "GET", lambda: "hello world") + router.bind("/login", "GET", lambda: "Please log-in.") + + assert router.run_request("/hello", "GET") == "hello world" + assert router.run_request("/login", "GET") == "Please log-in." + + # Should handle POST routes + router = Router() + router.bind("/vote", "POST", lambda: "Voted.") + router.bind("/comment", "POST", lambda: "Comment sent.") + + assert router.run_request("/vote", "POST") == "Voted." + assert router.run_request("/comment", "POST") == "Comment sent." + + # Should handle mixed routes. + router = Router() + router.bind("/login", "GET", lambda: "Please log-in.") + router.bind("/login", "POST", lambda: "Logging-in.") + + assert router.run_request("/login", "GET") == "Please log-in." + assert router.run_request("/login", "POST") == "Logging-in." + + # Should return 404 for non-existing routes. + router = Router() + assert ( + router.run_request("/this-url-does-not-exist", "GET") == "Error 404: Not Found" + ) + + # Should modify existing routes + router = Router() + router.bind("/page", "GET", lambda: "First binding.") + router.bind("/page", "GET", lambda: "Modified binding.") + + assert router.run_request("/page", "GET") == "Modified binding." + + print("All tests passed!") -- 2.30.2 From 9134f059da6ec6e93905b36e4720a4d00b9212cd Mon Sep 17 00:00:00 2001 From: schaermicha1 Date: Fri, 13 Mar 2026 21:01:04 +0100 Subject: [PATCH 4/5] refactor WhoLikesIt.py and PandasTutorial.py --- src/codewars/PandasTutorial.py | 3 --- src/codewars/WhoLikesIt.py | 4 +--- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/codewars/PandasTutorial.py b/src/codewars/PandasTutorial.py index 0567f8d..f762890 100644 --- a/src/codewars/PandasTutorial.py +++ b/src/codewars/PandasTutorial.py @@ -5,9 +5,6 @@ def export_csv_with_name_and_grade(student_name: str, grade: str): students_df = pd.read_csv("files/students.csv", index_col=False) grades_df = pd.read_csv("files/grades.csv", index_col=False) - print(students_df) - print(grades_df) - students_grades_df = students_df.merge( grades_df, left_on="Student_ID", right_on="ID" ) diff --git a/src/codewars/WhoLikesIt.py b/src/codewars/WhoLikesIt.py index 8324a7f..df9b188 100644 --- a/src/codewars/WhoLikesIt.py +++ b/src/codewars/WhoLikesIt.py @@ -1,7 +1,5 @@ def likes(names): - length = len(names[:4]) - - match length: + match len(names): case 0: return "no one likes this" case 1: -- 2.30.2 From 5d7063afa2330ee0c935a90abafed4d558c9a126 Mon Sep 17 00:00:00 2001 From: schaermicha1 Date: Thu, 19 Mar 2026 02:04:05 +0100 Subject: [PATCH 5/5] Add test files for PandasTutorial.py --- src/codewars/PandasTutorial.py | 4 ++++ src/codewars/files/grades.csv | 8 ++++++++ src/codewars/files/output.csv | 2 ++ src/codewars/files/students.csv | 3 +++ 4 files changed, 17 insertions(+) create mode 100644 src/codewars/files/grades.csv create mode 100644 src/codewars/files/output.csv create mode 100644 src/codewars/files/students.csv diff --git a/src/codewars/PandasTutorial.py b/src/codewars/PandasTutorial.py index f762890..39cb8ed 100644 --- a/src/codewars/PandasTutorial.py +++ b/src/codewars/PandasTutorial.py @@ -15,3 +15,7 @@ def export_csv_with_name_and_grade(student_name: str, grade: str): ] solution[["Student_ID", "Class"]].to_csv("files/output.csv", index=False) + + +if __name__ == "__main__": + export_csv_with_name_and_grade("Bob", "A") diff --git a/src/codewars/files/grades.csv b/src/codewars/files/grades.csv new file mode 100644 index 0000000..8f2d7df --- /dev/null +++ b/src/codewars/files/grades.csv @@ -0,0 +1,8 @@ +ID,Class,Grade +32155,English,A +32155,History,B +32155,Science,B +43226,English,C +43226,Math,A +43226,Science,A +43226,History,B diff --git a/src/codewars/files/output.csv b/src/codewars/files/output.csv new file mode 100644 index 0000000..df0f1b9 --- /dev/null +++ b/src/codewars/files/output.csv @@ -0,0 +1,2 @@ +Student_ID,Class +32155,English diff --git a/src/codewars/files/students.csv b/src/codewars/files/students.csv new file mode 100644 index 0000000..3466243 --- /dev/null +++ b/src/codewars/files/students.csv @@ -0,0 +1,3 @@ +Name,Student_ID +Bob,32155 +Ron,43226 -- 2.30.2