在給定的範圍中找出迴文乘積。
迴文數是指把數字反轉後仍然相同的數字。
例如,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,內含這個迴文的兩個因數,順序不拘。
有時候,我們必須引發例外。這麼做時,你應該一律附上有意義的錯誤訊息,指出錯誤的來源。這能讓你的程式碼更容易閱讀,也對除錯有極大的幫助。如果你知道錯誤來源會是某個特定型態,可以選擇引發其中一種內建錯誤型態,但仍然應該附上有意義的訊息。
這個練習要求你在 largest() 或 smallest() 函式收到一對不在正確範圍內的因數時,使用 raise 敘述來「throw」一個 ValueError。唯有你同時 raise 這個 exception 並附上訊息,測試才會通過。
若要帶著訊息引發 ValueError,請把訊息寫成 exception 型態的引數:
# if the max_factor is less than the min_factor
raise ValueError("min must be <= max")