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