高级 Python 开发课程
第 章
>
第 级
高级类
运算符重载
目标
使用向量和运算符重载来统计澄清葡萄酒的数量。
葡萄酒压榨后需要进行过滤和澄清,有好几个桶正在过滤,需要将它们全部冲洗干净。准确计算正在生产的葡萄酒数量非常重要,这样桶才能被封存并陈酿。
为此,你需要创建向量并将它们相加,这些向量类似于列表,但不那么灵活,且更节省内存。它们通常用于处理坐标,在本例中,我们将它们用作存储多个值的变量。向量相加是通过使用 运算符重载 实现的,该机制扩展了类对象的功能,使其可以像普通数值一样使用运算符。
首先,走到房间顶部,收集那里的金属水罐,这些水罐将用于冲洗正在桶中过滤的葡萄酒。一旦收集完毕,前往红地毯上带有黑色 X 标记处,面向桶,开始对每个桶的内容进行向量化处理。
X 标记在每种颜色的地毯上都成组三个排列:一个金色 X 标记、一个浅色 X 标记和一个深色 X 标记。在所有深色和浅色 X 标记处,使用 water() 函数来冲洗桶液。同时,在所有深色和浅色 X 标记处,使用 read() 函数来确定该列桶中正在处理的葡萄酒数量。而在金色 X 标记处,则使用 write() 函数记录各部分总量。
在代码编辑器中有一个名为 vector 的类,该类不仅允许你创建向量,还可以将它们相加。创建 vector 对象来存储在浅色和深色 X 标记上获取的数据,例如,在红色地毯上过滤的是红葡萄酒:
# Create object using data from dark X mark red_wine_dark = vector(345, 272) # Create object using data from light X mark red_wine_light = vector(248, 432) # Add together vectors for totals red_wine_total = red_wine_dark + red_wine_light
在向量中,第一个位置称为 x,第二个位置称为 y,其格式为:object_name = vector(x,y)。这对于使用 read() 函数获取信息并填充向量非常重要。
在金色 X 标记处使用 write() 函数记录每组向量的总计,例如,对于红色地毯的 X 标记,写法如下:
await player.write( "There is a total of %s pounds on the left barrels and %s pounds on the right barrels" % (red_wine_total.x, red_wine_total.y)
记得在总计变量后加上 .x 和 .y,以区分每个向量的数值。
对于每组彩色地毯,过滤的葡萄酒种类各不相同。在上述的 red 地毯上过滤的是 red_wine;在 yellow 地毯上过滤的是 sparkling_wine;在 green 地毯上过滤的是 white_wine;而在 orange 地毯上过滤的是 orange_wine。
一旦所有浅色和深色 X 标记均已通过 water() 函数进行冲洗,并且所有金色 X 标记都记录了总计,你就完成了该关卡。