Skip to content
Open
2 changes: 2 additions & 0 deletions Week01/info_muhammedsalih_yesilay.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
student_id = "220316059"
full_name = "Muhammed Salih Yeşilay"
4 changes: 4 additions & 0 deletions Week02/types_muhammedsalih_yesilay.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
my_int = 24
my_float = 1907.0
my_bool = 10 == 10
my_complex = 1807j
7 changes: 7 additions & 0 deletions Week03/pyramid_muhammedsalih_yesilay.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
def calculate_pyramid_height(number_of_blocks):
height = 0

while number_of_blocks > height:
height += 1
number_of_blocks -= height
return height
17 changes: 17 additions & 0 deletions Week03/sequences_muhammedsalih_yesilay.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
def remove_duplicates(seq : list) -> list:
return list(set(seq))

def list_counts(seq:list) -> dict:
L = {}
for i in seq:
if i in L:
L[i] += 1
else:
L[i] = 1
return L

def reverse_dict(d : dict) -> dict:
rd = {}
for i, h in d.items():
rd[h] = i
return rd
32 changes: 32 additions & 0 deletions Week04/decorators_muhammedsalih_yesilay.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import tracemalloc, time

def performance(func):
"""
Decorator to track function performance and record statistics.

:param func: Function to decorate.
:type func: callable
:return: Wrapped function.
:rtype: callable

:cvar counter: Number of calls.
:cvar total_time: Total execution time in seconds.
:cvar total_mem: Total peak memory in bytes.
"""
performance.counter = 0
performance.total_time = 0.0
performance.total_mem = 0.0

def wrapper(*args, **kwargs):
tracemalloc.start()
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
current, peak = tracemalloc.get_traced_memory()
tracemalloc.stop()
performance.counter += 1
performance.total_time += (end_time - start_time)
performance.total_mem += peak
return result

return wrapper
29 changes: 29 additions & 0 deletions Week04/functions_muhammedsalih_yesilay.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
custom_power = lambda x = 0, /, e = 1: x ** e


def custom_equation(x: int = 0, y: int = 0, /, a: int = 1, b: int = 1, *, c: int = 1) -> float:
"""
This function raises x to the power of a, y to the power of b, sums them, and then divides the result by c.

:param x: The positional-only integer base parameter for the equation , default is 0
:param y: The positional-only integer base parameter for the equation , default is 0
:param a: The positional-or-keyword integer exponent parameter for the equation , default is 1
:param b: The positional-or-keyword integer exponent parameter for the equation , default is 1
:param c: The keyword-only integer divisor parameter for the equation , default is 1
:return: The result of the calculation as a float and the equation is (x**a + y**b) / c
:rtype: float
"""
return (x**a + y**b) / c


def fn_w_counter() -> (int, dict[str, int]):
if not hasattr(fn_w_counter,'_call_counter'):
fn_w_counter._call_counter = 0
fn_w_counter._caller_dict = {}
caller = __name__
fn_w_counter._call_counter += 1
if caller in fn_w_counter._caller_dict:
fn_w_counter._caller_dict[caller] += 1
else:
fn_w_counter._caller_dict[caller] = 1
return fn_w_counter._call_counter,fn_w_counter._caller_dict
9 changes: 9 additions & 0 deletions Week05/awaitme_muhammedsalih_yesilay.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import asyncio

def awaitme(function):
async def wrapper(*args, **kwargs):
result = function(*args, **kwargs)
if asyncio.iscoroutine(result):
return await result
return result
return wrapper