بر اساس طرح طبقهبندی نیکوماخوس (۶۰ تا ۱۲۰ میلادی) برای اعداد صحیح مثبت، مشخص کنید که یک عدد perfect است، abundant است یا deficient.
ریاضیدان یونانی، نیکوماخوس، طرحی برای طبقهبندی اعداد صحیح مثبت ابداع کرد که هر عدد را بهطور یکتا در یکی از دستههای perfect، abundant یا deficient قرار میدهد، بر پایهی «مجموع مقسومعلیههای حقیقی».
مجموع مقسومعلیههای حقیقی برابر است با مجموع مقسومعلیههای یک عدد، بدون در نظر گرفتن خود آن عدد.
برای نمونه، مجموع مقسومعلیههای حقیقی عدد 15 برابر است با 1 + 3 + 5 = 9.
یک عدد وقتی perfect است که با مجموع مقسومعلیههای حقیقی خود برابر باشد. برای نمونه:
6 عددی perfect است، چون 1 + 2 + 3 = 6
28 عددی perfect است، چون 1 + 2 + 4 + 7 + 14 = 28
یک عدد وقتی abundant است که کوچکتر از مجموع مقسومعلیههای حقیقی خود باشد. برای نمونه:
12 عددی abundant است، چون 1 + 2 + 3 + 4 + 6 = 16
24 عددی abundant است، چون 1 + 2 + 3 + 4 + 6 + 8 + 12 = 36
یک عدد وقتی deficient است که بزرگتر از مجموع مقسومعلیههای حقیقی خود باشد. برای نمونه:
8 عددی deficient است، چون 1 + 2 + 4 = 7
راهی پیادهسازی کنید تا مشخص شود یک عدد دادهشده perfect است یا نه. بسته به مسیر زبان شما، ممکن است لازم باشد راهی هم پیادهسازی کنید تا مشخص شود آن عدد abundant یا deficient است.
گاهی لازم است یک استثنا ایجاد کنید. وقتی این کار را میکنید، همیشه باید یک پیام خطای معنادار هم بگنجانید تا نشان دهید منبع خطا چیست. این کار خوانایی کد شما را بیشتر میکند و بهطور چشمگیری به دیباگ کردن کمک میکند. در موقعیتهایی که میدانید منبع خطا از نوع مشخصی خواهد بود، میتوانید یکی از انواع خطای داخلی را ایجاد کنید، اما باز هم باید پیامی معنادار بگنجانید.
این تمرین بهطور خاص لازم میداند که از دستور raise استفاده کنید و اگر به تابع classify() عددی داده شود که عدد صحیح مثبت نیست، یک ValueError «پرتاب» کنید. تستها فقط وقتی قبول میشوند که هم exception را raise کنید و هم پیامی همراه آن بگنجانید.
برای raise کردن یک ValueError همراه با پیام، پیام را بهعنوان آرگومان به نوع exception بدهید:
# if a number to be classified is less than 1.
raise ValueError("Classification is only possible for positive integers.")