حل المسائل

حساب العمر

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

def age_at(age_now: int, current_year: int, at_year: int) -> int:
    return age_now + (at_year - current_year)
    

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

حساب الأجر

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

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

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

def salary(hours: float, per_hour_rate: float) -> float:
    return hours * per_hour_rate

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

assert salary(6, 30) == 180
assert salary(per_hour_rate=50, hours=10) == 500

توحيد الصيغة

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

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

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

أولاً نعرّف قاموسًا يحول جميع التصريفات إلى نفس الصيغة:

city_map = {
    'medina': 'madinah',
    'madinah': 'madinah',
    'madina': 'madinah',
    'al madinah': 'madinah', 
    'al madina': 'madinah',
    'المدينة': 'madinah',
    'مدينة': 'madinah',

    'mecca': 'makkah',
    'makkah': 'makkah',
    'makka': 'makkah',
    'مكة': 'makkah',
    'مكه': 'makkah',
}
  • نعرف الإجراء بأنه يأخذ نصًّا str ويُنتج نصًّا str آخر.
  • ولأن الحروف الإنجليزية قد تحوي أحرفًا كبيرة، فإننا نحولها جميعًا إلى صيغة صغيرة: .lower()
  • وأخيرًا نستعمل هذا النص كمفتاح لنسحب القيمة؛ الصيغة الموحَّدة
def normalize_city_name(city_name: str) -> str:
    text = city_name.lower()
    return city_map[text]

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

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')
)