44import sys
55from collections import Counter
66
7+
78class OperatingSystem (Enum ):
89 MACOS = "macOS"
910 ARCH = "Arch Linux"
1011 UBUNTU = "Ubuntu"
1112
13+
1214@dataclass (frozen = True )
1315class Person :
1416 name : str
@@ -24,28 +26,32 @@ class Laptop:
2426 screen_size_in_inches : float
2527 operating_system : OperatingSystem
2628
27- name = input ("Insert your name :" )
28- if len (name )== 0 :
29+
30+ name = input ("Insert your name :" )
31+ if len (name ) == 0 :
2932 print ("Name cannot be empty!" , file = sys .stderr )
3033 exit (1 )
31- elif len (name )> 50 :
32- print ("Name is too long!" , file = sys .stderr )
34+ elif len (name ) > 50 :
35+ print ("Name is too long!" , file = sys .stderr )
3336 exit (1 )
34- try :
35- age = int (input ("Insert your age :" ))
36- if age < 18 or age > 100 :
37+ try :
38+ age = int (input ("Insert your age :" ))
39+ if age < 18 or age > 100 :
3740 raise ValueError ("Age out of range" )
38- except ValueError as e :
41+ except ValueError as e :
3942 print (f"Invalid age: { e } " , file = sys .stderr )
4043 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+ preferred_os = input (
45+ "Insert your preferred_operating_system(macOS,Arch Linux,Ubuntu) :"
46+ )
47+ try :
48+ preferred_operating_system = OperatingSystem (preferred_os )
4449except ValueError :
45- print ("error in os name" ,file = sys .stderr )
50+ print ("error in os name" , file = sys .stderr )
4651 sys .exit (1 )
4752
48- person = Person (name ,age ,preferred_operating_system )
53+ person = Person (name , age , preferred_operating_system )
54+
4955
5056def find_possible_laptops (laptops : List [Laptop ], person : Person ) -> List [Laptop ]:
5157 possible_laptops = []
@@ -56,24 +62,58 @@ def find_possible_laptops(laptops: List[Laptop], person: Person) -> List[Laptop]
5662
5763
5864laptops = [
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 ),
65+ Laptop (
66+ id = 1 ,
67+ manufacturer = "Dell" ,
68+ model = "XPS" ,
69+ screen_size_in_inches = 13 ,
70+ operating_system = OperatingSystem .ARCH ,
71+ ),
72+ Laptop (
73+ id = 2 ,
74+ manufacturer = "Dell" ,
75+ model = "XPS" ,
76+ screen_size_in_inches = 15 ,
77+ operating_system = OperatingSystem .UBUNTU ,
78+ ),
79+ Laptop (
80+ id = 3 ,
81+ manufacturer = "Dell" ,
82+ model = "XPS" ,
83+ screen_size_in_inches = 15 ,
84+ operating_system = OperatingSystem .UBUNTU ,
85+ ),
86+ Laptop (
87+ id = 4 ,
88+ manufacturer = "Apple" ,
89+ model = "macBook" ,
90+ screen_size_in_inches = 13 ,
91+ operating_system = OperatingSystem .MACOS ,
92+ ),
93+ Laptop (
94+ id = 5 ,
95+ manufacturer = "Dell" ,
96+ model = "XPS" ,
97+ screen_size_in_inches = 13 ,
98+ operating_system = OperatingSystem .ARCH ,
99+ ),
64100]
65101
66- os_count = Counter (laptop .operating_system for laptop in laptops )
67- max_count = max (os_count .values ())
102+ os_count = Counter (laptop .operating_system for laptop in laptops )
103+ max_count = max (os_count .values ())
68104print (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 )
105+ most_available_os = []
106+ for os in os_count :
107+ count = os_count [os ]
108+ if count == max_count :
109+ most_available_os .append (os .value )
74110print (most_available_os )
75111possible_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 )} " )
112+ print (
113+ f"Count of available { person .preferred_operating_system .value } laptops for { person .name } is : { len (possible_laptops )} "
114+ )
77115
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." )
116+ if len (possible_laptops ) < max_count :
117+ print (
118+ f"Note: If you are willing to accept : { " or " .join (most_available_os )} , you are more likely to get a laptop."
119+ )
0 commit comments