检测给定范围内的回文乘积。
回文数是指将其数字顺序颠倒后仍然保持不变的数字。例如,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 语句“抛出”一个ValueError。只有当你既raise了这个exception,又为它附上一条消息时,测试才会通过。
要想在抛出ValueError时附带消息,把这条消息写成exception类型的一个实参:
# if the max_factor is less than the min_factor
raise ValueError("min must be <= max")