حاصلضربهای متقارن را در یک بازهی مشخص پیدا کنید.
عدد متقارن عددی است که با برعکس شدن ارقامش تغییری نمیکند.
برای مثال، 121 یک عدد متقارن است اما 112 نیست.
با داشتن یک بازه از اعداد، بزرگترین و کوچکترین اعداد متقارنی را پیدا کنید که حاصلضرب دو عدد درون آن بازه باشند.
راهحل شما باید بزرگترین و کوچکترین اعداد متقارن را همراه با عاملهای هر کدام در آن بازه برگرداند. اگر بزرگترین یا کوچکترین عدد متقارن بیش از یک جفت عامل در آن بازه داشته باشد، همهی جفتها را برگردانید.
با داشتن بازهی [1, 9] (هر دو شامل)...
و با داشتن فهرست همهی حاصلضربهای ممکن در این بازه:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 15, 21, 24, 27, 20, 28, 32, 36, 25, 30, 35, 40, 45, 42, 48, 54, 49, 56, 63, 64, 72, 81]
حاصلضربهای متقارن همه اعداد یکرقمی هستند (در این حالت):
[1, 2, 3, 4, 5, 6, 7, 8, 9]
کوچکترین حاصلضرب متقارن 1 است.
عاملهای آن (1, 1) هستند.
بزرگترین حاصلضرب متقارن 9 است.
عاملهای آن (1, 9) و (3, 3) هستند.
با داشتن بازهی [10, 99] (هر دو شامل)...
کوچکترین حاصلضرب متقارن 121 است.
عاملهای آن (11, 11) هستند.
بزرگترین حاصلضرب متقارن 9009 است.
عاملهای آن (91, 99) هستند.
smallest و largest:هر دو تابع باید دو آرگومان کلیدواژهای بگیرند:
max_factor: intmin_factor: int، مقدار پیشفرض 0مقدار بازگشتی آنها باید یک tuple -- (value, factors) باشد که در آن value خودِ عدد متقارن است و factors یک iterable است که هر دو عامل عدد متقارن را با ترتیب دلخواه در خود دارد.
گاهی لازم است که استثنا پرتاب کنید. وقتی این کار را میکنید، همیشه باید یک پیام خطای معنادار بگنجانید تا نشان دهید منشأ خطا چیست. این کار کد شما را خواناتر میکند و کمک چشمگیری به دیباگ کردن میکند. در موقعیتهایی که میدانید منشأ خطا از یک نوع مشخص است، میتوانید یکی از انواع خطای توکار را پرتاب کنید، اما باز هم باید پیامی معنادار بگنجانید.
این تمرین بهویژه ایجاب میکند که از دستور raise استفاده کنید تا وقتی تابع largest() یا smallest() یک جفت عامل را دریافت میکند که در بازهی درست نیستند، یک ValueError پرتاب کنید. تستها فقط زمانی قبول میشوند که هم exception را raise کنید و هم پیامی همراه آن بگنجانید.
برای پرتاب یک ValueError همراه با پیام، پیام را بهعنوان آرگومان به نوع exception بنویسید:
# if the max_factor is less than the min_factor
raise ValueError("min must be <= max")