Module 9 ex0 done + ex1 WIP

This commit is contained in:
2026-03-09 16:35:41 +01:00
parent e460d7507e
commit 384ad04a08
14 changed files with 2006 additions and 0 deletions

194
09/ex0/space_station.py Normal file
View File

@@ -0,0 +1,194 @@
import datetime
from typing import Optional
from pydantic import BaseModel, Field, ValidationError
SPACE_STATIONS = [
{
"station_id": "LGW125",
"name": "Titan Mining Outpost",
"crew_size": 6,
"power_level": 76.4,
"oxygen_level": 95.5,
"last_maintenance": "2023-07-11T00:00:00",
"is_operational": True,
"notes": None,
},
{
"station_id": "QCH189",
"name": "Deep Space Observatory",
"crew_size": 3,
"power_level": 70.8,
"oxygen_level": 88.1,
"last_maintenance": "2023-08-24T00:00:00",
"is_operational": False,
"notes": "System diagnostics required",
},
{
"station_id": "ISS674",
"name": "Europa Research Station",
"crew_size": 11,
"power_level": 82.0,
"oxygen_level": 91.4,
"last_maintenance": "2023-10-21T00:00:00",
"is_operational": True,
"notes": None,
},
{
"station_id": "ISS877",
"name": "Mars Orbital Platform",
"crew_size": 9,
"power_level": 79.7,
"oxygen_level": 87.2,
"last_maintenance": "2023-10-06T00:00:00",
"is_operational": False,
"notes": "System diagnostics required",
},
{
"station_id": "LGW194",
"name": "Deep Space Observatory",
"crew_size": 4,
"power_level": 80.2,
"oxygen_level": 89.9,
"last_maintenance": "2023-10-25T00:00:00",
"is_operational": False,
"notes": "System diagnostics required",
},
{
"station_id": "ISS847",
"name": "Solar Wind Monitor",
"crew_size": 11,
"power_level": 73.6,
"oxygen_level": 98.1,
"last_maintenance": "2023-12-11T00:00:00",
"is_operational": False,
"notes": "System diagnostics required",
},
{
"station_id": "QCH400",
"name": "Asteroid Belt Relay",
"crew_size": 12,
"power_level": 75.5,
"oxygen_level": 86.0,
"last_maintenance": "2023-07-15T00:00:00",
"is_operational": False,
"notes": "System diagnostics required",
},
{
"station_id": "ERS891",
"name": "Titan Mining Outpost",
"crew_size": 4,
"power_level": 94.4,
"oxygen_level": 97.3,
"last_maintenance": "2023-09-25T00:00:00",
"is_operational": True,
"notes": "All systems nominal",
},
{
"station_id": "ABR266",
"name": "Asteroid Belt Relay",
"crew_size": 8,
"power_level": 76.0,
"oxygen_level": 88.8,
"last_maintenance": "2023-07-10T00:00:00",
"is_operational": False,
"notes": "System diagnostics required",
},
{
"station_id": "LGW723",
"name": "Mars Orbital Platform",
"crew_size": 11,
"power_level": 90.8,
"oxygen_level": 87.3,
"last_maintenance": "2023-09-25T00:00:00",
"is_operational": False,
"notes": "System diagnostics required",
},
]
class SpaceStation(BaseModel):
station_id: str = Field(max_length=10, min_length=3)
name: str = Field(min_length=1, max_length=50)
crew_size: int = Field(le=20, ge=1)
power_level: float = Field(ge=0.0, le=100.0)
oxygen_level: float = Field(ge=0.0, le=100.0)
last_maintenance: datetime.datetime
is_operational: bool = Field(default=True)
notes: str | None = Field(default=None, max_length=200)
def main() -> None:
try:
valid_station = {
"station_id": "ISS001",
"name": "International Space Station",
"crew_size": 6,
"power_level": 85.5,
"oxygen_level": 92.3,
"last_maintenance": "2023-09-25T00:00:00",
}
invalid_station = {
"station_id": "ISS001",
"name": "International Space Station",
"crew_size": 26,
"power_level": 85.5,
"oxygen_level": 92.3,
"last_maintenance": "2023-09-25T00:00:00",
}
try:
print("\nValid station:n\n")
ss = SpaceStation(**valid_station)
print("Valid station created")
print(
f"ID: {ss.station_id}\n"
f"Name {ss.name}\n"
f"Crew: {ss.crew_size} people\n"
f"Power: {ss.power_level}%\n"
f"Oxygen: {ss.oxygen_level}%\n"
f"Status: {'operational' if ss.is_operational else 'not operational'}\n"
f"Note: {ss.notes}\n"
)
except ValidationError as err:
print(err)
try:
print("\nInvalid station:\n")
ss = SpaceStation(**invalid_station)
print("Valid station created")
print(
f"ID: {ss.station_id}\n"
f"Name {ss.name}\n"
f"Crew: {ss.crew_size} people\n"
f"Power: {ss.power_level}%\n"
f"Oxygen: {ss.oxygen_level}%\n"
f"Status: {'operational' if ss.is_operational else 'not operational'}\n"
f"Note: {ss.notes}\n"
)
except ValidationError as err:
print(err)
print("\nBatch stations:\n")
for station in SPACE_STATIONS:
try:
ss = SpaceStation(**station)
print("========================================")
print("Valid station created")
print(
f"ID: {ss.station_id}\n"
f"Name {ss.name}\n"
f"Crew: {ss.crew_size} people\n"
f"Power: {ss.power_level}%\n"
f"Oxygen: {ss.oxygen_level}%\n"
f"Status: {'operational' if ss.is_operational else 'not operational'}\n"
f"Note: {ss.notes}\n"
)
except ValidationError as e:
print(e.errors())
except Exception as err:
print(err)
if __name__ == "__main__":
main()