Skip to content

Commit dd973d2

Browse files
committed
code accepts user detail & tell how many laptops & which operating systems are avaialable
1 parent eedfc30 commit dd973d2

1 file changed

Lines changed: 79 additions & 0 deletions

File tree

sprint5-prep/prep8-exercise.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+
from collections import Counter
6+
7+
class OperatingSystem(Enum):
8+
MACOS = "macOS"
9+
ARCH = "Arch Linux"
10+
UBUNTU = "Ubuntu"
11+
12+
@dataclass(frozen=True)
13+
class Person:
14+
name: str
15+
age: int
16+
preferred_operating_system: OperatingSystem
17+
18+
19+
@dataclass(frozen=True)
20+
class Laptop:
21+
id: int
22+
manufacturer: str
23+
model: str
24+
screen_size_in_inches: float
25+
operating_system: OperatingSystem
26+
27+
name=input("Insert your name :")
28+
if len(name)==0 :
29+
print("Name cannot be empty!", file=sys.stderr)
30+
exit(1)
31+
elif len(name)>50 :
32+
print("Name is too long!", file=sys.stderr)
33+
exit(1)
34+
try :
35+
age=int(input("Insert your age :"))
36+
if age<18 or age>100 :
37+
raise ValueError("Age out of range")
38+
except ValueError as e :
39+
print(f"Invalid age: {e}", file=sys.stderr)
40+
sys.exit(1)
41+
preferred_os=input("Insert your preferred_operating_system(macOS,Arch Linux,Ubuntu) :")
42+
try :
43+
preferred_operating_system=OperatingSystem(preferred_os)
44+
except ValueError:
45+
print("error in os name",file=sys.stderr)
46+
sys.exit(1)
47+
48+
person=Person(name,age,preferred_operating_system)
49+
50+
def find_possible_laptops(laptops: List[Laptop], person: Person) -> List[Laptop]:
51+
possible_laptops = []
52+
for laptop in laptops:
53+
if laptop.operating_system == person.preferred_operating_system:
54+
possible_laptops.append(laptop)
55+
return possible_laptops
56+
57+
58+
laptops = [
59+
Laptop(id=1, manufacturer="Dell", model="XPS", screen_size_in_inches=13, operating_system=OperatingSystem.ARCH),
60+
Laptop(id=2, manufacturer="Dell", model="XPS", screen_size_in_inches=15, operating_system=OperatingSystem.UBUNTU),
61+
Laptop(id=3, manufacturer="Dell", model="XPS", screen_size_in_inches=15, operating_system=OperatingSystem.UBUNTU),
62+
Laptop(id=4, manufacturer="Apple", model="macBook", screen_size_in_inches=13, operating_system=OperatingSystem.MACOS),
63+
Laptop(id=5, manufacturer="Dell", model="XPS", screen_size_in_inches=13, operating_system=OperatingSystem.ARCH),
64+
]
65+
66+
os_count=Counter(laptop.operating_system for laptop in laptops)
67+
max_count=max(os_count.values())
68+
print(max_count)
69+
most_available_os=[]
70+
for os in os_count :
71+
count=os_count[os]
72+
if count==max_count :
73+
most_available_os.append(os.value)
74+
print(most_available_os)
75+
possible_laptops = find_possible_laptops(laptops, person)
76+
print(f"Count of available {person.preferred_operating_system.value} laptops for {person.name} is : {len(possible_laptops)}")
77+
78+
if len(possible_laptops)<max_count :
79+
print(f"Note: If you are willing to accept : {" or ".join(most_available_os)}, you are more likely to get a laptop.")

0 commit comments

Comments
 (0)