دورة تطوير بايثون المتقدمة
الفصل
>
المستوى
وحدات السلسلة والوقت
وحدة التقويم
الهدف
تحقق من التقويم وحدد التواريخ لبعض جداول التسليم باستخدام وحدة التقويم.
هناك عدة شحنات وصلت وجداول زمنية يجب الالتزام بها حتى يمكن توزيعها حول إنشاء المزرعة الجديدة. سابقاً استخدمنا وحدة التاريخ لإعداد ملصقات الشحن، هنا سنقوم بتعيين الجداول الزمنية باستخدام وحدة التقويم. للاستفادة من فئات ودوال الوحدة استخدم import calendar لاستيراد جميع المواد ذات الصلة.
لأغراضنا، سنستخدم الدوال التالية من وحدة التقويم:
calendar.calendar():يعرض تقويم السنة الكامل، يأخذ معاملًا واحدًا (1) وهو السنة التي ترغب في عرضها.calendar.month():يعرض تقويم لشهر واحد، يأخذ معاملين (2): السنة والشهر.calendar.isleap():يتحقق مما إذا كانت السنة سنة كبيسة، يأخذ معاملًا واحدًا (1) وهو السنة التي يتم التحقق منها.calendar.leapdays():يتحقق من عدد أيام الكبيسة المتراكمة عبر السنوات، يأخذ معاملين (2) يمثلان الفترتين الزمنيتين اللتين ترغب في التحقق منهما.itermonthdays():يستخدم الفئةCalendar()، ويتكرار عبر جميع أيام الشهر، يأخذ معاملين: السنة والشهر.itermonthdates():يستخدم الفئةCalendar()، ويتكرار عبر جميع تواريخ الشهر، يأخذ معاملين: السنة والشهر.monthdayscalendar():يستخدم الفئةCalendar()، ويتكرار عبر جميع أسابيع الشهر، يأخذ معاملين: السنة والشهر. يتم تخزين البيانات في قائمة متداخلة.monthdays2calendar():تعمل مثل الدالة السابقة ولكنها تخزن الأسابيع والأيام معاً في قائمة ثنائية الأبعاد.
لبدء العمل، توجه إلى علامة X الذهبية وراجع التقويم، أنشئ متغيراً باسم cal وخزن قيمة calendar.calendar() مع إضافة العام 2026 كمعامل، كما يلي: cal = calendar.calendar(2026). استخدم الدالة display() لعرض المتغير cal الذي قمت بإعداده.
بعد مراجعة التقويم وعرضه، انتقل إلى علامة X الفاتحة وتحقق من جدول البيانات على المكتب. استخدم الدالة read() لقراءة المذكرة الخاصة بشهر التوريد المجدول. أنشئ متغيرين، واحد باسم year وآخر باسم month واملأهما بالمعلومات التي قرأتها.
أنشئ متغيراً باسم calendar_month وخزن قيمة الدالة calendar.month() باستخدام متغيري year و month كمعاملات. استخدم الدالة display() لعرض تقويم الشهر الذي سيُستخدم لتحديد جداول التوزيع.
توجه إلى علامة X الداكنة على السجادة الخضراء، هنا سنسجل بعض نقاط البيانات للتأكد من عدم انحراف الجداول الزمنية. أنشئ متغيرين، واحد باسم leap_year وآخر باسم leap_days. بالنسبة لمتغير leap_year، خزن نتيجة calendar.isleap() مع تعيين 2026 كمعامل. سيسمح لك ذلك بالتحقق مما إذا كان عام المشروع الحالي سنة كبيسة. بالنسبة لمتغير leap_days، خزن قيمة calendar.leapdays() وأضف القيم: 2020 و2027 كمعاملات. هذا يتحقق من عدد أيام الكبيسة التي حدثت طوال مدة المشروع. استخدم الدالة write() المُعدة مسبقاً وأضف المتغيرين leap_year و leap_days لتسجيل البيانات.
توجه إلى علامة X الداكنة على السجادة الحمراء وواجه المكتب، هنا سنقوم بوضع مخطط لجدول الشهر. أنشئ متغيراً باسم date وخزن قيمة calendar.Calendar()، حيث يقوم بإنشاء كائن من الفئة يمكننا الرجوع إليه لاحقاً. أنشئ متغيراً آخر باسم day_roster وأضف له سلسلة فارغة بين علامتي اقتباس، سيمكننا ذلك من تخزين قائمة الأيام في سلسلة نصية. كما يلي: day_roster = "".
تمت كتابة حلقة for مسبقاً في المحرر لتكرار التقويم وتحديد التواريخ. استخدم الدالة itermonthdays() وأضف متغيري year و month اللذين أنشأتهما سابقاً كمعاملات. أضف العناصر الناقصة حسب الحاجة لإكمال تعداد القائمة.
for day in dates.itermonthdays(-insert value-, -insert value-): entry = "Day: %s \n" % (day) day_roster += entry
بعد إعداد الحلقة، استكمل بعد ذلك بإنشاء نسخة مماثلة من هذه الحلقة ولكن استبدل الدالة itermonthdays() بـ itermonthdates() وأضف متغيري year و month كمعاملات. بالنسبة لمتغير entry، اجعله يسجل البيانات كما يلي: entry = "%s \n" % (day). ستوفر لنا هذه التواريخ الكاملة لمدة المشروع. استخدم الدالة display() المُعدة مسبقاً مع المتغير day_roster لعرض القائمة الكاملة لأيام المشروع في التقويم.
توجه إلى علامة X الداكنة على السجادة الزرقاء وواجه المذكرة، هنا سنقوم بإعداد أسابيع متابعة المشروع المصنفة في قوائم. أنشئ متغيراً باسم weeks وخزن قيمة calendar.Calendar()، حيث يقوم بإنشاء كائن من الفئة يمكننا الرجوع إليه في الدوال. قم بتغيير قيمة متغير month إلى 7 لتحريك الجدول الزمني الذي نعمل عليه، كما يلي: month = 7.
أنشئ متغيراً باسم week_roster وأضف له سلسلة فارغة بين علامتي اقتباس، سيمكننا ذلك من تخزين قائمة الأسابيع في سلسلة نصية. كما يلي: week_roster = "". تمت كتابة حلقة for مسبقاً في المحرر لتكرار التقويم وتحديد أيام الأسبوع. استخدم الدالة monthdayscalendar() وأضف متغيري year و month اللذين أنشأتهما سابقاً كمعاملات. أضف العناصر الناقصة حسب الحاجة لإكمال تعداد القائمة.
for day in weeks.monthdayscalendar(-insert value-, -insert value-): entry = "%s \n" % (day) week_roster += entry
بعد إعداد الحلقة، قم بإنشاء نسخة مماثلة من هذه الحلقة ولكن استبدل الدالة monthdayscalendar() بـ monthdays2calendar() وأضف متغيري year و month كمعاملات. ستوفر لنا هذه القائمة التواريخ الكاملة لمدة المشروع. استخدم الدالة display() المُعدة مسبقاً مع المتغير week_roster لعرض القائمة الكاملة لأيام الأسبوع الخاصة بالمشروع في التقويم لإكمال المستوى.