Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Week02/types_hilmican_karadag.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
my_int = 10
my_float = 3.14
my_bool = True
my_complex = 3 + 9j
11 changes: 11 additions & 0 deletions Week03/pyramid_hilmican_karadag.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
def calculate_pyramid_height(number_of_blocks):

height = 1

while number_of_blocks >= x:

number_of_blocks = number_of_blocks - x

height = height + 1

return height
26 changes: 26 additions & 0 deletions Week03/sequences_hilmican_karadag.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
def remove_duplicates(seq: list) -> list:
"""
This function removes duplicates from a list.
"""
result = []
for item in seq:
if item not in result:
result.append(item)
return result


def list_counts(seq: list) -> dict:
"""
This function counts the number of occurrences of each item in a list.
"""
counts = {}
for item in seq:
counts[item] = counts.get(item, 0) + 1
return counts


def reverse_dict(d: dict) -> dict:
"""
This function reverses the keys and values of a dictionary.
"""
return {value: key for key, value in d.items()}
58 changes: 58 additions & 0 deletions Week04/decorators_hilmican_karadag.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import functools
import time
import tracemalloc


def performance(fn):
"""
Decorator that measures execution time and memory of the wrapped function.

Statistics are stored as attributes on the decorator itself:

- ``performance.counter``: number of decorated-function calls
- ``performance.total_time``: total time spent in seconds
- ``performance.total_mem``: total memory consumed in bytes

:param fn: the function to decorate
:type fn: callable
:return: the wrapped function
:rtype: callable
"""

@functools.wraps(fn)
def wrapper(*args, **kwargs):
started_here = not tracemalloc.is_tracing()
if started_here:
tracemalloc.start()
tracemalloc.reset_peak()
mem_before = tracemalloc.get_traced_memory()[0]
start = time.perf_counter()

try:
return fn(*args, **kwargs)
finally:
elapsed = time.perf_counter() - start
peak = tracemalloc.get_traced_memory()[1]
if started_here:
tracemalloc.stop()
performance.counter += 1
performance.total_time += elapsed
performance.total_mem += max(peak - mem_before, 0)

return wrapper


performance.counter = 0
performance.total_time = 0.0
performance.total_mem = 0


if __name__ == "__main__":

@performance
def build_list(n: int) -> list[int]:
return [i * i for i in range(n)]

build_list(100_000)
build_list(50_000)
print(performance.counter, performance.total_time, performance.total_mem)
Loading