轨道
/
Python
Python
/
练习
/
最大连续乘积
最大连续乘积

最大连续乘积

中等

简介

你为一个政府机构工作,这个机构截获了一伙银行劫匪之间的一系列加密通信信号。 这些信号中包含一长串数字。 你的团队需要运用各种数字信号处理技术来分析这些信号,找出其中可能表明他们正在策划抢劫的规律。

说明

你的任务是在加密信号中那串很长的数字里寻找规律。

这里要用到的技巧叫作最大数列乘积。

首先,我们来定义几个术语。

  • 输入:你需要分析的数字序列
  • 数列:输入中一段相邻的数字(也就是彼此紧挨着的数字)
  • 跨度:每个数列有多少位数字
  • 乘积:把几个数相乘得到的结果

我们用一个例子走一遍,输入是"63915"。

  • 要组成一个数列,就从原始输入中取相邻的数字。
  • 如果跨度是3,就会有 3 种可能的数列:
    • "639"
    • "391"
    • "915"
  • 接下来,我们要计算每个数列的乘积:
    • 数列"639"的乘积是 162(6 × 3 × 9 = 162)
    • 数列"391"的乘积是 27(3 × 9 × 1 = 27)
    • 数列"915"的乘积是 45(9 × 1 × 5 = 45)
  • 162 比 27 和 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")
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Python Exercism

准备好开始 最大连续乘积 了吗?

注册 Exercism,借助 17 个概念146 个练习 和真人导师指导,学习并掌握 Python,全部免费。