مسیرها
/
Python
Python
/
تمرین‌ها
/
حاصل‌ضرب‌های پالیندروم
حاصل‌ضرب‌های پالیندروم

حاصل‌ضرب‌های پالیندروم

متوسط

دستورالعمل‌ها

حاصل‌ضرب‌های متقارن را در یک بازه‌ی مشخص پیدا کنید.

عدد متقارن عددی است که با برعکس شدن ارقامش تغییری نمی‌کند. برای مثال، 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: int
  • min_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")
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Python Exercism

آماده‌اید حاصل‌ضرب‌های پالیندروم را شروع کنید؟

در Exercism ثبت‌نام کنید تا Python را همراه با 17 مفهوم146 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.