|
| 1 | +from dataclasses import dataclass |
| 2 | +from enum import Enum |
| 3 | + |
| 4 | +class OperatingSystem(Enum): |
| 5 | + MACOS = "macOS" |
| 6 | + UBUNTU = "Ubuntu" |
| 7 | + ARCH = "Arch Linux" |
| 8 | + |
| 9 | +@dataclass |
| 10 | +class Laptop: |
| 11 | + id: int |
| 12 | + manufacturer: str |
| 13 | + model: str |
| 14 | + screen_size_in_inches: float |
| 15 | + operating_system: OperatingSystem |
| 16 | + |
| 17 | +laptops = [ |
| 18 | + Laptop(id=1, manufacturer="Lenovo", model="ThinkPad", screen_size_in_inches=14, operating_system=OperatingSystem.ARCH), |
| 19 | + Laptop(id=2, manufacturer="HP", model="Pavilion", screen_size_in_inches=15.6, operating_system=OperatingSystem.UBUNTU), |
| 20 | + Laptop(id=3, manufacturer="Asus", model="ZenBook", screen_size_in_inches=13.3, operating_system=OperatingSystem.UBUNTU), |
| 21 | + Laptop(id=4, manufacturer="Apple", model="MacBook Air", screen_size_in_inches=13, operating_system=OperatingSystem.MACOS), |
| 22 | +] |
| 23 | + |
| 24 | +@dataclass |
| 25 | +class Person: |
| 26 | + name: str |
| 27 | + age: int |
| 28 | + preferred_operating_system: OperatingSystem |
| 29 | + |
| 30 | + |
| 31 | +name = input('Please enter your name: ') |
| 32 | + |
| 33 | +age_input = input('Please enter your age: ') |
| 34 | +try: |
| 35 | + age = int(age_input) |
| 36 | +except ValueError: |
| 37 | + print(f"Error: '{age_input}' is not a valid age. Please enter a number.") |
| 38 | + exit() |
| 39 | + |
| 40 | +preferred_os_input = input('Please enter your preferred operating system: ') |
| 41 | +try: |
| 42 | + preferred_operating_system = OperatingSystem(preferred_os_input) |
| 43 | +except ValueError: |
| 44 | + available_options = ', '.join([os.value for os in OperatingSystem]) |
| 45 | + print(f"Error: '{preferred_os_input}' is not available. Please choose from: {available_options}") |
| 46 | + exit() |
| 47 | + |
| 48 | + |
| 49 | +person = Person(name=name, age=age, preferred_operating_system=preferred_operating_system) |
| 50 | + |
| 51 | + |
| 52 | +number_of_available_laptops = sum( |
| 53 | + 1 for laptop in laptops if laptop.operating_system == person.preferred_operating_system |
| 54 | +) |
| 55 | + |
| 56 | +def offer_laptop_to_user() -> None: |
| 57 | + offer = input('Would you like a laptop with this OS (yes / no) ? ') |
| 58 | + if offer.lower() == "y" or offer.lower() == "yes": |
| 59 | + print('Great! Please come on monday next week to collect your laptop') |
| 60 | + else: |
| 61 | + print('No problem. See you later.') |
| 62 | + |
| 63 | +if number_of_available_laptops == 1: |
| 64 | + print(f'There is {number_of_available_laptops} laptop available with your preferred operating system.') |
| 65 | + offer_laptop_to_user() |
| 66 | +elif number_of_available_laptops > 1: |
| 67 | + print(f'There are {number_of_available_laptops} laptops available with your preferred operating system.') |
| 68 | + offer_laptop_to_user() |
| 69 | +else: |
| 70 | + print('There are no laptops available with your preferred operating system.') |
0 commit comments