轨道
/
Lean
Lean
/
练习
/
电阻色环三重奏
电阻色环三重奏

电阻色环三重奏

中等

说明

如果你想用 Raspberry Pi 做点什么,多半会用到_电阻器_。 这个练习里,你只需要知道关于它们的 3 件事:

  • 每个电阻器都有一个电阻值。

  • 电阻器很小,事实上小到如果直接把电阻值印在上面,会很难看清。 为了解决这个问题,制造商会把用颜色编码的色带印在电阻器上,用来表示它们的电阻值。

  • 每条色带相当于数字中的一位。 例如,如果他们印上一条棕色色带(值为 1),后面接着一条绿色色带(值为 5),就表示数字 15。 在这个练习中,你要写一个实用的小程序,这样就不用去记各条色带的值了。 程序接收 3 种颜色作为输入,输出以欧姆为单位的正确数值。 色带的编码如下:

  • black: 0

  • brown: 1

  • red: 2

  • orange: 3

  • yellow: 4

  • green: 5

  • blue: 6

  • violet: 7

  • grey: 8

  • white: 9

在《电阻颜色双色》中,你解码了前 2 种颜色。 例如:orange-orange 得到主值 33。 第 3 种颜色代表需要往主值后面加多少个零。 主值加上这些零,就得到以欧姆为单位的值。 在这个练习里,欧姆到底是什么并不重要。 例如:

  • orange-orange-black 是 33,不加零,也就是 33 ohms。
  • orange-orange-red 是 33,加 2 个零,也就是 3300 ohms。
  • orange-orange-orange 是 33,加 3 个零,也就是 33000 ohms。

(如果你喜欢数学,可以把这些零看成 10 的指数。 如果你不喜欢数学,那就直接按零来理解。 两者其实是一回事,只不过一个用大白话,一个用数学术语。)

这个练习要做的是把颜色转换成一个标签:

"... ohms"

所以输入 "orange", "orange", "black" 时应该返回:

"33 ohms"

遇到更大的电阻器时,会用公制前缀来表示更大的欧姆数量级,比如 "kiloohms"。 这就像用“2 千米”代替“2000 米”,或者用“2 千克”表示“2000 克”。

例如,输入 "orange", "orange", "orange" 时应该返回:

"33 kiloohms"

定义语法

Caution

这个练习是 Resistor Color Duo 的延续,并在此基础上展开。 虽然你可以按任意顺序完成练习,但我们建议你遵循推荐的顺序。

这个练习中,颜色的语法已经用 c* 前缀预先定义好了,例如 c*black。 然后,你需要按照说明定义语法,把颜色序列与电阻值关联起来,电阻值要带上国际单位制(SI)单位,可能还要带公制前缀。 颜色放在 *[[ 和 ]] 之间,用 , 分隔,例如 *[[c*black, c*yellow, c*violet]]。

这个任务很可能需要你使用 notation 或宏。 你可以参考一下相关资料。

由于新语法在编译时展开,除非定义了所有必需的语法,否则任何测试都无法通过编译。 因此,我们不依赖传统的运行时测试,而是使用 #guard_msgs。 这条命令会把给定的文档字符串与另一条命令(这里是 #eval)生成的消息进行比较,如果两者不同就报错。 你可以把没有报错看作测试通过。

如果你在本地或在 Lean 的在线演练场中工作,就能通过 Lean InfoView 即时看到 #guard_msgs 报告的任何错误。

Note

电阻值应使用单位 Ω(欧姆)输出。 这个 Unicode 字符可以在本地或在 Lean 的在线演练场中用快捷键\ohm生成。 如果你在 Exercism 的在线编辑器中工作,可以直接从说明中复制这个字符。

Caution

在线测试运行器目前不支持导入完整的 Lean 元编程库。 你可以自由使用 Lean 默认提供的任何功能,包括 Lean 命名空间中的功能,但如果添加 import Lean,或从 Lean 命名空间导入特定模块,那么你把解答提交到 Exercism 时就会失败。

请注意,解决这个练习并不需要导入 Lean 库。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Lean Exercism

准备好开始 电阻色环三重奏 了吗?

注册 Exercism,借助 100 个练习 和真人导师指导,学习并掌握 Lean,全部免费。