如果你想用 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 种颜色代表需要往主值后面加多少个零。
主值加上这些零,就得到以欧姆为单位的值。
在这个练习里,欧姆到底是什么并不重要。
例如:
(如果你喜欢数学,可以把这些零看成 10 的指数。 如果你不喜欢数学,那就直接按零来理解。 两者其实是一回事,只不过一个用大白话,一个用数学术语。)
这个练习要做的是把颜色转换成一个标签:
"... ohms"
所以输入 "orange", "orange", "black" 时应该返回:
"33 ohms"
遇到更大的电阻器时,会用公制前缀来表示更大的欧姆数量级,比如 "kiloohms"。 这就像用“2 千米”代替“2000 米”,或者用“2 千克”表示“2000 克”。
例如,输入 "orange", "orange", "orange" 时应该返回:
"33 kiloohms"
这个练习是 Resistor Color Duo 的延续,并在此基础上展开。
虽然你可以按任意顺序完成练习,但我们建议你遵循推荐的顺序。
这个练习中,颜色的语法已经用 c* 前缀预先定义好了,例如 c*black。
然后,你需要按照说明定义语法,把颜色序列与电阻值关联起来,电阻值要带上国际单位制(SI)单位,可能还要带公制前缀。
颜色放在 *[[ 和 ]] 之间,用 , 分隔,例如 *[[c*black, c*yellow, c*violet]]。
这个任务很可能需要你使用 notation 或宏。 你可以参考一下相关资料。
由于新语法在编译时展开,除非定义了所有必需的语法,否则任何测试都无法通过编译。
因此,我们不依赖传统的运行时测试,而是使用 #guard_msgs。
这条命令会把给定的文档字符串与另一条命令(这里是 #eval)生成的消息进行比较,如果两者不同就报错。
你可以把没有报错看作测试通过。
如果你在本地或在 Lean 的在线演练场中工作,就能通过 Lean InfoView 即时看到 #guard_msgs 报告的任何错误。
电阻值应使用单位 Ω(欧姆)输出。
这个 Unicode 字符可以在本地或在 Lean 的在线演练场中用快捷键\ohm生成。
如果你在 Exercism 的在线编辑器中工作,可以直接从说明中复制这个字符。
在线测试运行器目前不支持导入完整的 Lean 元编程库。
你可以自由使用 Lean 默认提供的任何功能,包括 Lean 命名空间中的功能,但如果添加 import Lean,或从 Lean 命名空间导入特定模块,那么你把解答提交到 Exercism 时就会失败。
请注意,解决这个练习并不需要导入 Lean 库。