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
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@

node_modules
testoutput.txt

.venv/
__pycache__/
*.pyc
33 changes: 33 additions & 0 deletions Spring 5 exercises/checktype.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
def open_account(balances, name, amount):
balances[name] = amount

def sum_balances(accounts):
total = 0
for name, pence in accounts.items():
print(f"{name} had balance {pence}")
total += pence
return total

def format_pence_as_string(total_pence):
if total_pence < 100:
return f"{total_pence}p"
pounds = int(total_pence / 100)
pence = total_pence % 100
return f"£{pounds}.{pence:02d}"

balances = {
"Sima": 700,
"Linn": 545,
"Georg": 831,
}

open_account(balances,"Tobi", 913)
open_account(balances,"Olya", 713)

total_pence = sum_balances(balances)
total_string = format_pence_as_string(total_pence)

print(f"The bank accounts total {total_string}")

# i amended three errors from original code from prep, line 28 function name is format_pence-as_string rather than format_pence_as_str, line 24 ad 25, supposed
# three arguments instead of 2, so i add balances when we call open_account and also call open_account amount should be integer rather than string or decimal
22 changes: 22 additions & 0 deletions Spring 5 exercises/class.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
class Person:
def __init__(self, name: str, age: int, preferred_operating_system: str,address:str):
self.name = name
self.age = age
self.preferred_operating_system = preferred_operating_system
self.address=address

imran = Person("Imran", 22, "Ubuntu", "23 main raod")
print(imran.name)

eliza = Person("Eliza", 34, "Arch Linux","32 divert way")
print(eliza.name)

def is_adult(person: Person) -> bool:
return person.age >= 18

print(is_adult(imran))

def home_address(person :Person):
return person.address

print(home_address(eliza))
28 changes: 28 additions & 0 deletions Spring 5 exercises/dataclass.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from dataclasses import dataclass
from datetime import date

@dataclass
class Person:
name : str
date_of_birth: date
preferred_operating_system: str

def is_adult(self) -> bool :
today = date.today()
age = today.year - self.date_of_birth.year

if (today.month, today.day) < (self.date_of_birth.month, self.date_of_birth.day):
age-=1

return age>=18

imaran= Person("Imaran", date(2011,11,23), "Ubuntun")
imara2= Person("Imaran", date(2011,11,23), "Ubuntun")

print(imaran)
print(imara2)
print(imaran==imara2)
print(imaran.is_adult())



20 changes: 20 additions & 0 deletions Spring 5 exercises/generics.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from dataclasses import dataclass
from typing import List

@dataclass(frozen=True)
class Person:
name: str
age : int
children: List["Person"]

fatma = Person(name="Fatma", age=5, children=[])
aisha = Person(name="Aisha", age= 1, children=[])

imran = Person(name="Imran",age = 32, children=[fatma, aisha])

def print_family_tree(person: Person) -> None:
print(person.name)
for child in person.children:
print(f"- {child.name} ({child.age})")

print_family_tree(imran)
36 changes: 36 additions & 0 deletions Spring 5 exercises/inheritance.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
class Parent:
def __init__(self, first_name: str, last_name: str):
self.first_name = first_name
self.last_name = last_name

def get_full_name(self) -> str:
return f"{self.first_name} {self.last_name}"

def change_last_name(self, last_name: str) -> None:
self.last_name = last_name


class Child(Parent):
def __init__(self, first_name: str, last_name: str):
super().__init__(first_name, last_name)
self.previous_last_names = []

def change_last_name(self, last_name) -> None:
self.previous_last_names.append(self.last_name)
self.last_name = last_name

def get_full_name(self) -> str:
suffix = ""
if len(self.previous_last_names) > 0:
suffix = f" (née {self.previous_last_names[0]})"
return f"{self.first_name} {self.last_name}{suffix}"

person1 = Child("Elizaveta", "Alekseeva")
print(person1.get_full_name())
person1.change_last_name("Tyurina")
print(person1.get_full_name())

person2 = Parent("Elizaveta", "Alekseeva")
print(person2.get_full_name())
person2.change_last_name("Tyurina")
print(person2.get_full_name())
29 changes: 29 additions & 0 deletions Spring 5 exercises/methods.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Think of the advantages of using methods instead of free functions:
# Better organization, More readable code, Easier maintenance,Better editor support (autocomplete),Code reuse across all instances of the class
# Ease of documentation: Related data and behavior are grouped together, making the class easier to understand.
# Encapsulation: The implementation can change without affecting the rest of the program, as long as the method's interface stays the same.

from datetime import date


class Person:
def __init__(self, name: str, date_of_birth:date, preferred_operating_system: str):
self.name = name
self.date_of_birth = date_of_birth
self.preferred_operating_system = preferred_operating_system

def is_adult(self):
today= date.today()

age=today.year- self.date_of_birth .year

if(today.month, today.day) < (self.date_of_birth.month, self.date_of_birth.day):
age-=1

return age>=18

imaran = Person("Imaran",date(2003,1,5), "Ubuntun")
eliza = Person("Eliza",date(2012,11,25), "Ubuntun")

print(imaran.is_adult())
print(eliza.is_adult())
89 changes: 89 additions & 0 deletions Spring 5 exercises/operation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
from dataclasses import dataclass
from enum import Enum
from typing import List
import sys


class OperatingSystem(Enum):
MACOS = "macOS"
ARCH = "Arch Linux"
UBUNTU = "Ubuntu"


@dataclass(frozen=True)
class Person:
name: str
age: int
preferred_operating_system: OperatingSystem


@dataclass(frozen=True)
class Laptop:
id: int
manufacturer: str
model: str
screen_size_in_inches: float
operating_system: OperatingSystem


laptops = [
Laptop(1, "Dell", "XPS", 13, OperatingSystem.ARCH),
Laptop(2, "Dell", "XPS", 15, OperatingSystem.UBUNTU),
Laptop(3, "Dell", "XPS", 15, OperatingSystem.UBUNTU),
Laptop(4, "Apple", "MacBook", 13, OperatingSystem.MACOS),
]


# Read name
name = input("Enter your name: ")

# Read and convert age
try:
age = int(input("Enter your age: "))
except ValueError:
print("Error: age must be a whole number.", file=sys.stderr)
sys.exit(1)

# Read and convert operating system
print("Choose an operating system:")
print("- Ubuntu")
print("- Arch Linux")
print("- macOS")

os_input = input("Preferred operating system: ")

try:
preferred_os = OperatingSystem(os_input)
except ValueError:
print("Error: invalid operating system.", file=sys.stderr)
sys.exit(1)

# Create the person
person = Person(name, age, preferred_os)

# Find matching laptops
matching = [
laptop
for laptop in laptops
if laptop.operating_system == person.preferred_operating_system
]

print(
f"\nThe library has {len(matching)} laptop(s) running "
f"{person.preferred_operating_system.value}."
)

# Count laptops for each operating system
counts = {}

for laptop in laptops:
os = laptop.operating_system
counts[os] = counts.get(os, 0) + 1

best_os = max(counts, key=counts.get)

if best_os != person.preferred_operating_system:
print(
f"If you're willing to accept {best_os.value}, "
f"there are {counts[best_os]} laptops available."
)
42 changes: 42 additions & 0 deletions Spring 5 exercises/refactor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from dataclasses import dataclass
from typing import List

@dataclass(frozen=True)
class Person:
name: str
age: int
preferred_operating_system: str


@dataclass(frozen=True)
class Laptop:
id: int
manufacturer: str
model: str
screen_size_in_inches: float
operating_system: List [str]


def find_possible_laptops(laptops: List[Laptop], person: Person) -> List[Laptop]:
possible_laptops = []
for laptop in laptops:
if laptop.operating_system == person.preferred_operating_system:
possible_laptops.append(laptop)
return possible_laptops


people = [
Person(name="Imran", age=22, preferred_operating_system="Ubuntu"),
Person(name="Eliza", age=34, preferred_operating_system="Arch Linux"),
]

laptops = [
Laptop(id=1, manufacturer="Dell", model="XPS", screen_size_in_inches=13, operating_system=["Arch Linux"]),
Laptop(id=2, manufacturer="Dell", model="XPS", screen_size_in_inches=15, operating_system= ["Ubuntu"]),
Laptop(id=3, manufacturer="Dell", model="XPS", screen_size_in_inches=15, operating_system=["ubuntu"]),
Laptop(id=4, manufacturer="Apple", model="macBook", screen_size_in_inches=13, operating_system=["macOS"]),
]

for person in people:
possible_laptops = find_possible_laptops(laptops, person)
print(f"Possible laptops for {person.name}: {possible_laptops}")
17 changes: 17 additions & 0 deletions Spring 5 exercises/type_exaple.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
def double(number):
return number * 3

print(double(10))

# Because double conflicts with multipying 3 so we can change function name to 'triple' or '*2'

def triple(number):
return number * 3

print(triple(10))


def double(number):
return number * 2

print(double(10))
Loading