diff --git a/src/codewars/PandasTutorial.py b/src/codewars/PandasTutorial.py new file mode 100644 index 0000000..39cb8ed --- /dev/null +++ b/src/codewars/PandasTutorial.py @@ -0,0 +1,21 @@ +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) + + 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) + + +if __name__ == "__main__": + export_csv_with_name_and_grade("Bob", "A") 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!") diff --git a/src/codewars/WhoLikesIt.py b/src/codewars/WhoLikesIt.py new file mode 100644 index 0000000..df9b188 --- /dev/null +++ b/src/codewars/WhoLikesIt.py @@ -0,0 +1,24 @@ +def likes(names): + match len(names): + 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!") 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