مسائل

حساب العمر

اكتب إجراء يحسب عمرك في أي سنة معينة.

def age_at(age_now: int, current_year: int, at_year: int) -> int:
    pass # اكتب هنا بدل كلمة pass

print(age_at(0, 2000, 2010)) # بعد الولادة
print(age_at(20, 2000, 2010)) # في المستقبل
print(age_at(20, 2000, 1995)) # في الماضي
None
None
None

حساب الأجر

عرِّف الإجراء الذي يحسب الأجر بعاملين:

  • hours: float: عدد الساعات التي يعملها الموظف
  • per_hour_rate: float: سعر الساعة الواحدة

واجعل نوع العائد float كذلك باستعمال -> float.

# اكتب الإجراء هنا

ثم اختبر الإجراء باستعمال جمل توكيدية: assert.

توحيد الصيغة

في هذا المثال، تعود هذه النصوص كلها إلى نفس المعنى.

  • (‘medina’, ‘madinah’, ‘madina’, ‘al madinah’, ‘al madina’, ‘medina’, ‘madinah’, ‘madina’, ‘المدينة’, ‘مدينة’),
  • (‘mecca’, ‘makkah’, ‘makka’, ‘makkah’, ‘makkah’, ‘مكة’, ‘مكه’),

المطلوب إنشاء قاموس بحيث لو أعطيته أحد هذه الكلمات كمفتاح، فإنها جميعًا تؤول إلى صيغة موحدة:

def normalize_city_name(city_name: str) -> str:
    pass # اكتب جسد الإجراء هنا
assert (
    'madinah' ==
    normalize_city_name('المدينة') ==
    normalize_city_name('al madinah') ==
    normalize_city_name('medina')
)

assert (
    'makkah' ==
    normalize_city_name('مكة') ==
    normalize_city_name('makkah') ==
    normalize_city_name('makka') ==
    normalize_city_name('mecca')
)

حساب الجُمَّل

حِسَاب الجُمَّل وهو حساب استخدم في اللغات السامية؛ حيث نجده مستعملًا في بلاد الهند قديمًا، وعند اليهود؛ فالأبجدية العبرية تتطابق مع الأبجدية العربية حتى حرف التاء (أبجد، هوز، حطي، كلمن، سعفص، قرشت) أي تتكون من 22 حرفا وتزيد العربية: (ثخذ، ضظغ). واستخدمه المسلمون في تثبيت التاريخ. لكل حرف مدلول رقمي يبدأ بالرقم 1 وينتهي عند الرقم 1000.

حساب الجمَّل
ا 1 ي 10 ق 100 غ 1000
ب 2 ك 20 ر 200 بغ 2000
جـ 3 ل 30 ش 300 جغ 3000
د 4 م 40 ت 400 دغ 4000
هـ 5 ن 50 ث 500 هغ 5000
و 6 س 60 خ 600 وغ 6000
ز 7 ع 70 ذ 700 زغ 7000
ح 8 ف 80 ض 800 حغ 8000
ط 9 ص 90 ظ 900 طغ 9000

اكتب تفاصيل الإجراء الذي يحسب الجمَّل لكلمة معينة.

def gematria(word: str) -> int:
    pass

فإذا أرادوا كتابة الرقم (1240) كتبوا «غرم»، لأن الغين 1,000، والراء 200، والميم 40، فكانوا يراعون عند تركيب الجُمّل أن يكون الحرف المعبر عن العدد الأكبر في المقدمة، ثم يليه الأصغر منه وهكذا دواليك فنجد من الأمثلة على ذلك:

assert gematria('غرم') == 1240
assert gematria('رب') == 202
assert gematria('ريح') == 218
assert gematria('شعب') == 372

يقال أنه عندما توفي السلطان الظاهر برقوق أول سلاطين المماليك البرجية، قام بعض الظرفاء بصياغة عبارة تحدد تاريخ وفاته فقال: «وفاة برقوق في المشمش»، وعندما نحسب تاريخ وفاة برقوق وهي «في المشمش» يكون الناتج:

(80+10+1+30+40+300+40+300) = 801، وبالتالي فتكون العبارة: «وفاة برقوق 801» هجرية وذلك صحيح.

assert gematria('في المشمش') == 801 == 80+10+1+30+40+300+40+300

يقال أيضاً أن شاعراً يسمى الدّلنجاوي مات فرثاه صديق له فقال:

سألتُ الشّعرَ هل لكَ من صديقٍ وقد سكنَ الدّلنجاويّ لحــده
فصاحَ وخرّ مغشياً عليــــه وأصبح راقداً في القبر عنــده
فقلتُ لمن يقول الشعر أقْصِــر لقد أرّختُ: مات الشعرُ بعـده

ويتضح لنا أن تاريخ الوفاة يكون في معرفة حساب العبارة «مات الشعرُ بعدَهُ»، فيكون الحساب:

(40+1+400+1+30+300+70+200+2+70+4+5) = (1123)، وذلك يعني أن الشاعر الدلنجاوي توفي في عام 1123 للهجرة.

assert gematria('مات الشعر بعده') == 1123 == 40+1+400+1+30+300+70+200+2+70+4+5