Skip to content

Commit 7cd99f3

Browse files
committed
enums.py
1 parent 52e5b5a commit 7cd99f3

1 file changed

Lines changed: 129 additions & 0 deletions

File tree

sprint5-prep-exercises/enums.py

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
from enum import Enum
2+
3+
from dataclasses import dataclass
4+
import sys
5+
from typing import List
6+
7+
8+
class OperatingSystem(Enum):
9+
MACOS = "macOS"
10+
ARCH = "Arch Linux"
11+
UBUNTU = "Ubuntu"
12+
13+
14+
@dataclass(frozen=True)
15+
class Person:
16+
name: str
17+
age: int
18+
preferred_operating_system: OperatingSystem
19+
20+
21+
@dataclass(frozen=True)
22+
class Laptop:
23+
id: int
24+
manufacturer: str
25+
model: str
26+
screen_size_in_inches: float
27+
operating_system: OperatingSystem
28+
29+
30+
def find_possible_laptops(laptops: List[Laptop], person: Person) -> List[Laptop]:
31+
possible_laptops = []
32+
for laptop in laptops:
33+
if laptop.operating_system == person.preferred_operating_system:
34+
possible_laptops.append(laptop)
35+
return possible_laptops
36+
37+
38+
def operating_system_laptop_num(
39+
laptops: List[Laptop], system: OperatingSystem
40+
) -> List[Laptop]:
41+
sys_laptops = []
42+
for laptop in laptops:
43+
if laptop.operating_system == system:
44+
sys_laptops.append(laptop)
45+
return sys_laptops
46+
47+
48+
def inputPerson() -> dict:
49+
name = input("Enter name: ")
50+
age = int(input("Enter age: "))
51+
systemStr = input("Enter preferred operating system: ")
52+
system = None
53+
for system_variant in OperatingSystem:
54+
if systemStr.lower() == system_variant.name.lower():
55+
system = system_variant
56+
if system == None:
57+
print("Incorrect operating system input.")
58+
return {}
59+
60+
return {"name": name, "age": age, "system": system}
61+
62+
63+
def main():
64+
input = inputPerson()
65+
if len(input) == 0:
66+
return
67+
68+
newPerson = Person(input["name"], input["age"], input["system"])
69+
laptops = [
70+
Laptop(
71+
id=1,
72+
manufacturer="Dell",
73+
model="XPS",
74+
screen_size_in_inches=13,
75+
operating_system=OperatingSystem.ARCH,
76+
),
77+
Laptop(
78+
id=2,
79+
manufacturer="Dell",
80+
model="XPS",
81+
screen_size_in_inches=15,
82+
operating_system=OperatingSystem.UBUNTU,
83+
),
84+
Laptop(
85+
id=3,
86+
manufacturer="Dell",
87+
model="XPS",
88+
screen_size_in_inches=15,
89+
operating_system=OperatingSystem.UBUNTU,
90+
),
91+
Laptop(
92+
id=4,
93+
manufacturer="Apple",
94+
model="macBook",
95+
screen_size_in_inches=13,
96+
operating_system=OperatingSystem.MACOS,
97+
),
98+
]
99+
100+
preferred_laptops_num = len(find_possible_laptops(laptops, newPerson))
101+
max_other_laptops = 0
102+
other_laptops_sys = None
103+
for system_variant in OperatingSystem:
104+
if system_variant == input["system"]:
105+
continue
106+
laptops_num = len(operating_system_laptop_num(laptops, system_variant))
107+
if laptops_num > preferred_laptops_num:
108+
max_other_laptops = laptops_num
109+
other_laptops_sys = system_variant
110+
111+
print(
112+
"We have "
113+
+ str(preferred_laptops_num)
114+
+ " with "
115+
+ input["system"].name
116+
+ " installed."
117+
)
118+
if max_other_laptops > 0:
119+
print(
120+
"We also have "
121+
+ str(max_other_laptops)
122+
+ " with "
123+
+ other_laptops_sys.name
124+
+ " installed."
125+
)
126+
127+
128+
if __name__ == "__main__":
129+
main()

0 commit comments

Comments
 (0)