Skip to content

Commit 49db011

Browse files
committed
Complete task-8 Enums
1 parent a4c9cf3 commit 49db011

1 file changed

Lines changed: 79 additions & 0 deletions

File tree

sprint-5-prep/8-enums.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
from dataclasses import dataclass
2+
from enum import Enum
3+
from typing import List
4+
import sys
5+
6+
class OperatingSystem(Enum):
7+
MACOS = "macOS"
8+
ARCH = "Arch Linux"
9+
UBUNTU = "Ubuntu"
10+
11+
@dataclass(frozen=True)
12+
class Person:
13+
name: str
14+
age: int
15+
preferred_operating_system: OperatingSystem
16+
17+
@dataclass(frozen=True)
18+
class Laptop:
19+
id: int
20+
manufacturer: str
21+
model: str
22+
screen_size_in_inches: float
23+
operating_system: OperatingSystem
24+
25+
os_input_name = input("Your name is: ")
26+
27+
os_input_age = input("Your age is: ")
28+
try:
29+
age = int(os_input_age)
30+
except ValueError:
31+
print(f"Error: '{os_input_age}' is not a valid age", file=sys.stderr)
32+
sys.exit(1)
33+
34+
os_input_preferred_os = input("Preferred operating system is: ")
35+
try:
36+
preferred_operating_system = OperatingSystem(os_input_preferred_os)
37+
except ValueError:
38+
print(f"Error: '{os_input_preferred_os}' is not a valid operating system", file=sys.stderr)
39+
sys.exit(1)
40+
41+
person = Person(name = os_input_name, age=age, preferred_operating_system=preferred_operating_system)
42+
43+
laptops = [
44+
Laptop(id=1, manufacturer="Dell", model="XPS", screen_size_in_inches=13, operating_system=OperatingSystem.ARCH),
45+
Laptop(id=2, manufacturer="Dell", model="XPS", screen_size_in_inches=15, operating_system=OperatingSystem.UBUNTU),
46+
Laptop(id=3, manufacturer="Dell", model="XPS", screen_size_in_inches=15, operating_system=OperatingSystem.UBUNTU),
47+
Laptop(id=4, manufacturer="Apple", model="macBook", screen_size_in_inches=13, operating_system=OperatingSystem.MACOS),
48+
Laptop(id=5, manufacturer="Apple", model="macBook", screen_size_in_inches=14, operating_system=OperatingSystem.MACOS),
49+
Laptop(id=6, manufacturer="Apple", model="macBook", screen_size_in_inches=15, operating_system=OperatingSystem.MACOS),
50+
]
51+
52+
def find_specific_os(laptops: List[Laptop], preferred_os: OperatingSystem) -> List[Laptop]:
53+
possible_laptops = []
54+
55+
for laptop in laptops:
56+
if (laptop.operating_system == preferred_os):
57+
possible_laptops.append(laptop)
58+
59+
possible_laptops_amount = len(possible_laptops)
60+
61+
print(f"The amount of possible laptops with preferred operating system is", possible_laptops_amount)
62+
63+
return possible_laptops
64+
65+
result = find_specific_os(laptops, preferred_operating_system)
66+
67+
counts_laptop_per_os: dict[OperatingSystem, int] = {}
68+
69+
for laptop in laptops:
70+
os = laptop.operating_system
71+
if os in counts_laptop_per_os:
72+
counts_laptop_per_os[os] += 1
73+
else:
74+
counts_laptop_per_os[os] = 1
75+
76+
top_os = max(counts_laptop_per_os, key=lambda os: counts_laptop_per_os[os])
77+
78+
if top_os != preferred_operating_system:
79+
print(f"If you're willing to use {top_os.value}, you're more likely to get a laptop ({counts_laptop_per_os[top_os]} available)")

0 commit comments

Comments
 (0)