Compare commits

...

4 Commits

9 changed files with 182 additions and 0 deletions

View File

@ -0,0 +1,16 @@
# Task: Schreibt für die folgende Aufgabe einige Unit-Test. Nutzt dazu für den Happy-Path einen parametrisierten Test für
# einige valide Inputs und Outputs
def calculate_bmi(weight_kg: float, height_m: float) -> float:
"""
Berechnet den Body Mass Index (BMI).
BMI = Gewicht (kg) / Grösse (m)^2
"""
if weight_kg <= 0 or height_m <= 0:
raise ValueError("Gewicht und Grösse müssen positiv sein.")
return weight_kg / (height_m**2)
if __name__ == "__main__":
print(calculate_bmi(weight_kg=72, height_m=1.84))

View File

@ -0,0 +1,29 @@
# TASK: Schreibe sinnvolle Tests für die folgende Funktion
# Schreibe Tests für die korrekte Struktur des Outputs der Funktion
# Teste, ob bei Übergabe von 'falschem' Parameter data eine Exception geworfen wird
# https://docs.python.org/3/library/exceptions.html
# Passing arguments of the wrong type (e.g. passing a list when an int is expected) should result in a TypeError,
# but passing arguments with the wrong value (e.g. a number outside expected boundaries) should result in a ValueError.
def double_integers(data: list[int]) -> list[int]:
"""Doubles a list of given integers
:param data: list of integers
:return: list of doubled integers
"""
if not isinstance(data, list):
raise TypeError("data must be a list")
if not all([isinstance(i, int) for i in data]):
raise TypeError("data may contain only integers")
return [i * 2 for i in data]
if __name__ == "__main__":
data = [1, 2, 3]
result = double_integers(data)
print(result)

View File

@ -0,0 +1,14 @@
# https://www.codewars.com/kata/53dbd5315a3c69eed20002dd
# level: 7 kyu
# In this kata you will create a function that takes a list of non-negative integers and strings and returns a new
# list with the strings filtered out.
#
# Example
# filter_list([1,2,'a','b']) == [1,2]
# filter_list([1,'a','b',0,15]) == [1,0,15]
# filter_list([1,2,'aasf','1','123',123]) == [1,2,123]
def filter_list(a_list):
return [i for i in a_list if isinstance(i, int)]

View File

@ -0,0 +1,37 @@
# https://www.codewars.com/kata/5ea2baed9345eb001e8ce394
# 7 kyu
# Input parameters
# dataframe: pandas.DataFrame object
# col: target column
# func: filter function
# Task
# Your function must return a new pandas.DataFrame object with the same columns as the original input. However,
# include only the rows whose cell values in the designated column evaluate to False by func.
#
# Input DataFrame will never be empty. The target column will always be one of the dataframe columns. Filter function
# will be a valid one. Index value must remain the same.
# REMARK: leichte Modifikation -> es wird ausgegeben, was in der Funktion definiert wurde (True) und nicht umgekehrt.
import pandas as pd
def filter_dataframe(df, col, func):
if col not in df.columns:
raise ValueError(f"Column '{col}' is not present in the DataFrame.")
mask = df[col].apply(func)
return df[mask]
if __name__ == "__main__":
df = pd.DataFrame(
{
"A": [1, 2, 3, 4, 5],
}
)
print(filter_dataframe(df, "A", lambda x: x >= 4))

View File

@ -0,0 +1,18 @@
# https://www.codewars.com/kata/54ff3102c1bad923760001f3
# level: 7 kyu
# Return the number (count) of vowels in the given string.
# We will consider a, e, i, o, u as vowels for this Kata (but not y).
# The input string will only consist of lower case letters and/or spaces.
def get_count(inputStr):
num_vowels = 0
for char in inputStr:
if char in "aeiouAEIOU":
num_vowels = num_vowels + 1
return num_vowels
if __name__ == "__main__":
print(get_count("Hello World"))

View File

@ -0,0 +1,24 @@
from src.tutorial.testing.practice.catching_exeptions import double_integers
import pytest
@pytest.mark.parametrize(
("input", "expected"),
[
([1, 2, 3], [2, 4, 6]),
([5], [10]),
([100, 900, -2], [200, 1800, -4]),
],
)
def test_double_integers(input, expected):
assert double_integers(input) == expected
def test_argument_is_list():
with pytest.raises(TypeError, match="data must be a list"):
double_integers(4)
def test_list_with_integers_only():
with pytest.raises(TypeError, match="data may contain only integers"):
double_integers([4, 3, 2, "str"])

View File

@ -0,0 +1,24 @@
from src.tutorial.testing.practice.kata_list_filtering import filter_list
import pytest
@pytest.mark.parametrize(
("input", "expected"),
[
([3, 5, "m", "0", 7], [3, 5, 7]),
(["3", "5", "m", "0", "f"], []),
([1, 2, 3], [1, 2, 3]),
],
)
def test_filter_list(input, expected):
assert filter_list(input) == expected
def test_parameter_is_list():
input = [7, 9, 0]
result = isinstance(input, list)
assert result
input = 9
result = isinstance(input, list)
assert not result

View File

@ -0,0 +1,20 @@
from src.tutorial.testing.practice.pandas_filter_rows import filter_dataframe
import pytest
import pandas as pd
@pytest.fixture
def standard_df():
df = pd.DataFrame(
{
"A": [1, 2, 3, 4, 5],
"B": [0, 2, 2, 4, 5],
"C": [1, 2, 3, 8, 5],
}
)
return df
def test_col_not_in_dataframe(standard_df):
with pytest.raises(ValueError):
filter_dataframe(standard_df, "Z", lambda x: x >= 4)