Skip to content

Commit 5da4ac2

Browse files
committed
Added Static and Class Methods - Lab
1 parent d6a1ad2 commit 5da4ac2

File tree

7 files changed

+153
-0
lines changed

7 files changed

+153
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from functools import reduce
2+
3+
4+
class Calculator:
5+
6+
@staticmethod
7+
def add(*nums):
8+
return sum(nums)
9+
10+
@staticmethod
11+
def multiply(*nums):
12+
return reduce(lambda x, y: x * y, nums)
13+
14+
@staticmethod
15+
def divide(*nums):
16+
return reduce(lambda x, y: x / y, nums)
17+
18+
@staticmethod
19+
def subtract(*nums):
20+
return reduce(lambda x, y: x - y, nums)
21+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class Shop:
2+
3+
def __init__(self, name, type, capacity):
4+
self.name = name
5+
self.type = type
6+
self.capacity = capacity
7+
self.items = {}
8+
9+
@classmethod
10+
def small_shop(cls, name, type_shop):
11+
return cls(name, type_shop, 10)
12+
13+
def add_item(self, item_name):
14+
if sum(self.items.values()) == self.capacity:
15+
return "Not enough capacity in the shop"
16+
17+
if item_name not in self.items:
18+
self.items[item_name] = 0
19+
20+
self.items[item_name] += 1
21+
22+
return f"{item_name} added to the shop"
23+
24+
def remove_item(self, item_name, amount):
25+
if item_name not in self.items:
26+
return f"Cannot remove {amount} {item_name}"
27+
28+
if self.items[item_name] < amount:
29+
return f"Cannot remove {amount} {item_name}"
30+
31+
self.items[item_name] -= amount
32+
33+
if self.items[item_name] <= 0:
34+
del self.items[item_name]
35+
36+
return f"{amount} {item_name} removed from the shop"
37+
38+
def __repr__(self):
39+
return f"{self.name} of type {self.type} with capacity {self.capacity}"
40+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class Integer:
2+
3+
def __init__(self, value):
4+
self.value = value
5+
6+
@classmethod
7+
def from_float(cls, float_value):
8+
if not isinstance(float_value, float):
9+
return "value is not a float"
10+
11+
return cls(int(float_value))
12+
13+
@classmethod
14+
def from_roman(cls, value):
15+
rom_val = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
16+
int_val = 0
17+
18+
for i in range(len(value)):
19+
if i != 0 and rom_val[value[i]] > rom_val[value[i - 1]]:
20+
int_val += rom_val[value[i]] - 2 * rom_val[value[i - 1]]
21+
else:
22+
int_val += rom_val[value[i]]
23+
24+
return cls(int_val)
25+
26+
@classmethod
27+
def from_string(cls, value):
28+
if not isinstance(value, str):
29+
return f"wrong type"
30+
31+
return cls(int(value))
32+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from project.room import Room
2+
3+
4+
class Hotel:
5+
def __init__(self, name):
6+
self.name = name
7+
self.rooms = []
8+
self.guests: int = 0
9+
10+
@classmethod
11+
def from_stars(cls, stars_count):
12+
return cls(f"{stars_count} stars Hotel")
13+
14+
def add_room(self, room: Room):
15+
self.rooms.append(room)
16+
17+
def take_room(self, room_number, people):
18+
room = next(filter(lambda r: r.number == room_number, self.rooms))
19+
result = room.take_room(people)
20+
21+
if result:
22+
return result
23+
24+
self.guests += people
25+
26+
def free_room(self, room_number):
27+
room = next(filter(lambda r: r.number == room_number, self.rooms))
28+
guests = room.guests
29+
result = room.free_room()
30+
31+
if result:
32+
return result
33+
34+
self.guests -= guests
35+
36+
def status(self):
37+
return f"Hotel {self.name} has {self.guests} total guests\n" \
38+
f"Free rooms: {', '.join(str(r.number) for r in self.rooms if not r.is_taken)}\n" \
39+
f"Taken rooms: {', '.join(str(r.number) for r in self.rooms if r.is_taken)}"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Room:
2+
def __init__(self, number, capacity):
3+
self.number = number
4+
self.capacity = capacity
5+
self.guests = 0
6+
self.is_taken = False
7+
8+
def take_room(self, people):
9+
if self.is_taken or people > self.capacity:
10+
return f"Room number {self.number} cannot be taken"
11+
12+
self.is_taken = True
13+
self.guests = people
14+
15+
def free_room(self):
16+
if not self.is_taken:
17+
return f"Room number {self.number} is not taken"
18+
19+
self.is_taken = False
20+
self.guests = 0
21+

0 commit comments

Comments
 (0)