حساب العمر
اكتب إجراء يحسب عمرك في أي سنة معينة.
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)) # في الماضي
حساب الأجر
عرِّف الإجراء الذي يحسب الأجر بعاملين:
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')
)