Skip to content
Open
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
10 changes: 10 additions & 0 deletions Week03/pyramid_elif_gulseren.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
def calculate_pyramid_height(number_of_blocks):
height = 0
layer_blocks = 1

while number_of_blocks >= layer_blocks:
number_of_blocks -= layer_blocks
height += 1
layer_blocks += 1

return height
31 changes: 31 additions & 0 deletions Week03/sequences_elif_gulseren.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
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.
"""
reversed_d = {}
for k, v in d.items():
reversed_d[v] = k
return reversed_d
32 changes: 32 additions & 0 deletions Week04/functions_elif_gulseren.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
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:
"""
Calculates the result of a custom mathematical equation.

:param x: The first base (positional-only).
:param y: The second base (positional-only).
:param a: The exponent for the first base (positional-or-keyword).
:param b: The exponent for the second base (positional-or-keyword).
:param c: The divisor (keyword-only).
:return: The result of the equation (x**a + y**b) / c as a float.
"""
if type(x) is not int or type(y) is not int or type(a) is not int or type(b) is not int or type(c) is not int:
raise TypeError("All arguments must be integers.")

return float((x ** a + y ** b) / c)

def fn_w_counter() -> (int, dict[str, int]):
if not hasattr(fn_w_counter, "total_calls"):
fn_w_counter.total_calls = 0
fn_w_counter.caller_dict = {}

fn_w_counter.total_calls += 1

caller = __name__

if caller not in fn_w_counter.caller_dict:
fn_w_counter.caller_dict[caller] = 0
fn_w_counter.caller_dict[caller] += 1

return fn_w_counter.total_calls, fn_w_counter.caller_dict
32 changes: 32 additions & 0 deletions Week05/emails_elif_gulseren.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import re

class Emails(list):
def __init__(self, emails=None):
if emails is None:
emails = []

valid_emails = []
for email in emails:
if self.validate(email):
if email not in valid_emails:
valid_emails.append(email)

super().__init__(valid_emails)

self.data = self

def validate(self, email):
if not isinstance(email, str):
raise ValueError("Bütün e-posta adresleri metin (string) formatında olmalıdır.")

pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
if not re.match(pattern, email):
raise ValueError(f"Geçersiz e-posta formatı: {email}")

return True

def __repr__(self):
return super().__repr__()

def __str__(self):
return super().__str__()
Loading