1+
2+ #enum exersice
3+
4+ from dataclasses import dataclass
5+ from typing import List
6+ import sys
7+
8+
9+ @dataclass (frozen = True )
10+ class Person :
11+ name : str
12+ age : int
13+ preferred_operating_system : str
14+
15+
16+ @dataclass (frozen = True )
17+ class Laptop :
18+ id : int
19+ manufacturer : str
20+ model : str
21+ screen_size_in_inches : float
22+ operating_system : str
23+
24+
25+ laptops = [
26+ Laptop (1 , "Dell" , "XPS" , 13 , "Ubuntu" ),
27+ Laptop (2 , "Dell" , "XPS" , 15 , "Ubuntu" ),
28+ Laptop (3 , "Dell" , "XPS" , 15 , "Arch Linux" ),
29+ Laptop (4 , "Apple" , "MacBook" , 13 , "macOS" ),
30+ Laptop (5 , "Lenovo" , "ThinkPad" , 14 , "Ubuntu" ),
31+ ]
32+
33+
34+ name = input ("Enter your name: " )
35+
36+ try :
37+ age = int (input ("Enter your age: " ))
38+ except ValueError :
39+ print ("Error: age must be a number." , file = sys .stderr )
40+ sys .exit (1 )
41+
42+
43+ preferred_operating_system = input (
44+ "Enter your preferred operating system: "
45+ )
46+
47+ available_operating_systems = {
48+ laptop .operating_system for laptop in laptops
49+ }
50+
51+ if preferred_operating_system not in available_operating_systems :
52+ print (
53+ "Error: that operating system is not available." ,
54+ file = sys .stderr
55+ )
56+ sys .exit (1 )
57+
58+
59+ person = Person (
60+ name = name ,
61+ age = age ,
62+ preferred_operating_system = preferred_operating_system
63+ )
64+
65+
66+ matching_laptops = [
67+ laptop
68+ for laptop in laptops
69+ if laptop .operating_system == person .preferred_operating_system
70+ ]
71+
72+ print (
73+ f"The library has { len (matching_laptops )} "
74+ f"laptop(s) with { person .preferred_operating_system } ."
75+ )
76+
77+
78+ laptop_counts = {}
79+
80+ for laptop in laptops :
81+ laptop_counts [laptop .operating_system ] = (
82+ laptop_counts .get (laptop .operating_system , 0 ) + 1
83+ )
84+
85+
86+ for operating_system , count in laptop_counts .items ():
87+ if (
88+ operating_system != person .preferred_operating_system
89+ and count > len (matching_laptops )
90+ ):
91+ print (
92+ f"The library has more { operating_system } laptops "
93+ f"({ count } ). You are more likely to get a laptop "
94+ f"if you are willing to use { operating_system } ."
95+ )
0 commit comments