你为一个政府机构工作,这个机构截获了一伙银行劫匪之间的一系列加密通信信号。 这些信号中包含一长串数字。 你的团队需要运用各种数字信号处理技术来分析这些信号,找出其中可能表明他们正在策划抢劫的规律。
你的任务是在加密信号中那串很长的数字里寻找规律。
这里要用到的技巧叫作最大数列乘积。
首先,我们来定义几个术语。
我们用一个例子走一遍,输入是"63915"。
3,就会有 3 种可能的数列:
"639""391""915""639"的乘积是 162(6 × 3 × 9 = 162)"391"的乘积是 27(3 × 9 × 1 = 27)"915"的乘积是 45(9 × 1 × 5 = 45)"63915"的最大数列乘积来自数列"639"。
因此答案是 162。有时需要抛出异常。抛出异常时,一定要附上有意义的错误消息,说明错误的来源。这样代码更易读,也能大大方便调试。如果你已经知道错误来源属于某种特定类型,可以选择抛出内置错误类型中的一种,但同样要附上一条有意义的消息。
这道练习要求你在largest_product()函数收到无效输入时,使用raise 语句来“抛出”一个ValueError。只有既raise这个exception,又附上一条消息,测试才会通过。你也可以直接复用series练习中的代码!
要抛出带消息的ValueError,可以把消息写成exception类型的一个实参:
# span of numbers is longer than number series
raise ValueError("span must not exceed string length")
# span of number is negative
raise ValueError("span must not be negative")
# series includes non-number input
raise ValueError("digits input must only contain digits")