عَلی که با کمک شما توانست از مخمصهی خرید ۳ پیتزا نجات پیدا کند؛ حال میخواهد بهعنوان تشکر، پیتزایی برای شما بفرستد. ولی از آنجایی که شما در شهر دیگری زندگی میکنید، دو راه برای فرستادن پیتزا به شما پیشنهاد میکند:
- ارسال پیتزا با قَطار
- ارسال پیتزا با قاطِر
از آنجایی که شما برای حل کردن این سوال و رفتن به سوال بعدی، عجلهی بسیاری دارید؛ گزینهی اول را انتخاب میکنید. ولی امان از دل غافل! شما باید دو کلاس خواسته شده را پیادهسازی کنید تا شرکت راهآهن، این پیتزا را برای شما بفرستد.
کلاس Train
از پیش پیادهسازی شده است ولی دو کلاس Trip
و Passenger
را شما باید پیادهسازی کنید.
کلاس قطار Train
Train
متد سازنده __init__
این متد در فایل اولیه مقداردهی شده است و نباید آن را دستکاری کنید. ویژگیهایی که در این متد به شیء اختصاص داده میشوند، عبارتاند از:
- آخرین شهر بازدید شده
last_visited_city
: از نوع str میباشد. - ظرفیت بار
weight_capacity
: از نوع float میباشد. - وضعیت
is_on_trip
: از نوع bool است؛ در صورتی که True باشد، قطار در حال سفر است و اگر False باشد یعنی در ایستگاه راه آهن مستقر است.
کلاس سفر Trip
Trip
ویژگیهای کلاس (Class Attributes)
- ویژگی
all_cities
: این ویژگی برابر با یک تاپل از همه شهرهایی است که امکان ساخت راه آهن در آنها وجود دارد. این ویژگی در فایل اولیه مقداردهی شده است و نباید آن را دستکاری کنید.
متد سازنده __init__
این متد در فایل اولیه مقداردهی شده است و نباید آن را دستکاری کنید. ویژگیهایی که در این متد به شیء اختصاص داده میشوند، عبارتاند از:
- قطار
train
: از نوع Train میباشد. - شهر مبدا
origin_city
: از نوع str میباشد. - شهر مقصد
destination_city
: از نوع str میباشد. - مسافران
passengers
: از نوع list میباشد.
جزئیات
متد origin_city_validation
origin_city_validation
این متد یک ورودی به نام origin_city میگیرد:
- اگر این ورودی در لیست
all_cities
موجود نباشد، یک Exception با پیغامThis input is not a verified city!
پرتاب میکند. - اگر این ورودی با شهر مقصد برابر باشد، یک Exception با پیغام
Origin and destination cities can't be the same!
پرتاب میکند. - اگر این ورودی با آخرین شهر بازدید شده قطار برابر نباشد، یک Exception با پیغام
The train of the trip is not available in the origin city!
پرتاب میکند.
در نهایت اگر هیچکدام از حالتهای فوق صادق نبود باید origin_city برگردانده شود.
متد train_validation
train_validation
این متد یک ورودی به نام train میگیرد:
- اگر این ورودی از جنس قطار (کلاس
Train
) نباشد، یک Exception با پیغامThis input is not a train!
پرتاب میکند. - در صورتی که قطار در حال سفر باشد، یک Exception با پیغام
This train is not available!
پرتاب میکند.
در نهایت اگر هیچکدام از حالتهای فوق صادق نبود باید train برگردانده شود.
متد جادویی
داندرمتدی را برای این کلاس بازنویسی کنید که هنگام صدا زدن شیء سفر، «ظرفیتِ وزنِ بارِ باقیمانده از قطارِ سفر» برگردانده شود.
مثلا اگر یک سفر قطاری با ظرفیت وزن 1000 کیلوگرم و دو مسافر با وزن بار 60 و 70 کیلوگرم داشته باشد، هنگام صدا زدن این سفر، عدد 870 برگردانده میشود.
کلاس مسافر Passenger
Passenger
متد سازنده __init__
این متد در فایل اولیه مقداردهی شده است و نباید آن را دستکاری کنید. ویژگیهایی که در این متد به شیء اختصاص داده میشوند، عبارتاند از:
- نام
fullname
: از نوع str میباشد. - وزن بار
load_weight
: از نوع float میباشد.
جزئیات
متد attend_trip
attend_trip
این متد در ورودی یک سفر میگیرد و در صورتی که بار مسافر از «ظرفیتِ وزنِ بارِ باقیمانده از قطارِ سفر» کمتر یا مساوی باشد، مسافر را به لیست مسافران سفر اضافه میکند. در غیر این صورت یک Exception با پیغام Heavy load!
پرتاب میکند.
متد cancel_trip
cancel_trip
این متد در ورودی یک سفر میگیرد و در صورتی که مسافر در لیست مسافران آن سفر موجود باشد، مسافر را از لیست مسافران سفر حذف میکند. در غیر این صورت یک Exception با پیغام This passenger is not attended to this trip!
پرتاب میکند.
متد جادویی
داندرمتدی را برای این کلاس بازنویسی کنید که اگر یک شیء مسافر print
شود، به جای آدرس آن شیء در حافظه، نام مسافر چاپ شود.
نکات
- میتوانید فایل اولیه این سوال را از این لینک دریافت کنید.
- شما میتوانید با پیادهسازی این سوال به صورت بخشبخش نمره بگیرید.
- در صورت تمایل، میتوانید علاوهبر کلاسهای خواستهشده، کلاسها و تابعهای کمکی دیگری نیز در فایل
railway.py
پیادهسازی کنید.
نحوه ارسال
شما باید کلاسهای Train
، Passenger
و Trip
موجود در فایل railway.py
را تکمیل و سپس این فایل را ارسال کنید.
ارسال پاسخ برای این سؤال