كل شهر، يلتقي شريكك بأفضل أصدقائه. كلاهما مشغولان جدًا، ما يجعل إيجاد موعد مناسب أمرًا صعبًا! وبما أن جدولك أنت أيضًا مزدحم، فإن شريكك يتحقق دائمًا من مواعيد اللقاء المحتملة معك:
في مكالمة هذا الشهر، سألك شريكك هذا السؤال:
وفي حيرة من أمرك، تسأل ما معنى يوم «teenth». يشرح لك شريكك أن يوم teenth، وهو مفهوم اختلقه، يشير إلى الأيام في الشهر التي تنتهي بـ '-teenth':
ولأن أيام الأسبوع سبعة أيضًا، فمن المضمون أن لكل يوم من أيام الأسبوع يوم teenth واحدًا فقط في كل شهر.
الآن وقد فهمت مفهوم يوم teenth، تتحقق من تقويمك. ليس لديك أي شيء مخطط له في الخميس من أيام teenth، فتؤكد الموعد بسعادة مع شريكك.
مهمتك هي إيجاد التاريخ الدقيق للقاء، بمعلومية الشهر والسنة ويوم الأسبوع والأسبوع.
هناك ست قيم للأسبوع يجب أن تأخذها في الاعتبار: first وsecond وthird وfourth وlast وteenth.
على سبيل المثال، قد يُطلب منك إيجاد تاريخ اللقاء في يوم الاثنين الأول من يناير 2018 (1 يناير 2018).
وبالمثل، قد يُطلب منك إيجاد:
teenth في مايو 2020 (13 مايو 2020)teenth في أغسطس 1953 (15 أغسطس 1953)teenth
يشير أسبوع teenth إلى الأيام السبعة في الشهر التي تنتهي بـ '-teenth' (الأيام 13 و14 و15 و16 و17 و18 و19).
وإذا طُلب منك إيجاد يوم السبت من الأسبوع teenth في أغسطس 1953، فإننا ننظر في تقويمه:
August 1953
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
ومن هذا نجد أن يوم السبت من الأسبوع teenth هو 15 أغسطس 1953.
أضفنا واصفًا إضافيًا للأسبوع (fifth) لخامس يوم من أيام الأسبوع في الشهر، إن وُجد.
إذا لم يكن في الشهر خامس يوم من أيام الأسبوع، فينبغي أن ترفع استثناءً.
أحيانًا تحتاج في كودك إلى تخصيص الاستثناءات وraise لها. وعندما تفعل ذلك، ينبغي أن تُضمّن دائمًا رسالة خطأ ذات معنى توضّح مصدر الخطأ. هذا يجعل كودك أكثر قابلية للقراءة ويساعد كثيرًا في تصحيح الأخطاء.
يمكن إنشاء استثناءات مخصصة عبر أصناف استثناء جديدة (راجع classes لمزيد من التفاصيل.) وهي عادةً أصناف فرعية من Exception.
في الحالات التي تعرف فيها أن مصدر الخطأ سيكون مشتقًّا من نوع استثناء معيّن، يمكنك أن تختار أن ترث من أحد built in error types ضمن صنف Exception. وعند رفع الخطأ، ينبغي أن تُضمّن مع ذلك رسالة ذات معنى.
يتطلب هذا التمرين بوجه خاص أن تُنشئ استثناءً مخصصًا يُرفع/"يُطرح" عندما تُعطى دالة meetup() تركيبة غير صالحة من اسم يوم من أيام الأسبوع ورقم. لن تنجح الاختبارات إلا إذا خصّصت الاستثناءات المناسبة، واستخدمت raise لرفعها، وضمّنت رسائل خطأ مناسبة.
لتخصيص built-in exception، أنشئ class يرث من ذلك الاستثناء. وعند رفع الاستثناء المخصص مع رسالة، اكتب الرسالة كوسيط لنوع exception:
# subclassing the built-in ValueError to create MeetupDayException
class MeetupDayException(ValueError):
"""Exception raised when the Meetup weekday and count do not result in a valid date.
message: explanation of the error.
"""
def __init__(self, message):
self.message = message
# raising a MeetupDayException
raise MeetupDayException("That day does not exist.")
سجّل في Exercism لتتعلّم وتتقن Python عبر 17 مفهومًا146 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.