我最近开始驾驶一辆传统上使用高级汽油(93辛烷值)的汽车。不过,制造商表示,它只需要91辛烷值。问题是,在美国,你只能买到87、89或93辛烷值的汽油。在我居住的地方,汽油价格从一个等级跳到下一个等级,每加仑上涨30美分,因此高级汽油比普通汽油贵60美分。那么,为什么不尝试省点钱呢?
等到油表显示油箱半满,然后加入89辛烷值的汽油,这样你就得到了91辛烷值,这很容易。但是,接下来该怎么做就变得棘手了——半箱91辛烷值加上半箱93辛烷值最终会变成92辛烷值,然后你该怎么办?你可以继续计算,但它们会变得越来越复杂。这就是Python发挥作用的地方。
我想出一个简单的方案,我可以将油箱加到某个液位,加入93辛烷值的汽油,然后在相同或某个其他液位加入89辛烷值的汽油,主要目标是最终混合物永远不会低于91辛烷值。我需要做的是创建一个重复计算,该计算使用先前加油的辛烷值。我想应该有一些多项式方程可以解决这个问题,但在Python中,这听起来像一个循环。
#!/usr/bin/env python
# octane.py
o = 93.0
newgas = 93.0 # this represents the octane of the last fillup
i = 1
while i < 21: # 20 iterations (trips to the pump)
if newgas == 89.0: # if the last fillup was with 89 octane
# switch to 93
newgas = 93.0
o = newgas/2 + o/2 # fill when gauge is 1/2 full
else: # if it wasn't 89 octane, switch to that
newgas = 89.0
o = newgas/2 + o/2 # fill when gauge says 1/2 full
print str(i) + ': '+ str(o)
i += 1
正如你所看到的,我将变量o(油箱中当前的辛烷值混合物)和变量newgas(我上次加入油箱的汽油)初始化为相同的93值。然后,循环将重复20次,用于20次加油,每次去加油站时在89辛烷值和93辛烷值之间切换。
1: 91.0
2: 92.0
3: 90.5
4: 91.75
5: 90.375
6: 91.6875
7: 90.34375
8: 91.671875
9: 90.3359375
10: 91.66796875
11: 90.333984375
12: 91.6669921875
13: 90.3334960938
14: 91.6667480469
15: 90.3333740234
16: 91.6666870117
17: 90.3333435059
18: 91.6666717529
19: 90.3333358765
20: 91.6666679382
这表明我可能只需要10或15个循环就可以看到稳定。它还表明,很快,我就会低于我的91辛烷值目标。看到交替混合值的这种稳定也很有趣,事实证明,对于任何每次选择相同量的方案,这种情况都会发生。事实上,即使89辛烷值和93辛烷值的加油量不同,情况也是如此。
所以在这一点上,我开始尝试分数,推理我可能需要比89辛烷值加油量更大的93辛烷值加油量。我也不想经常去加油站。我最终得到的结果(在我看来相当不错)是等到油箱大约剩下 7⁄12 时加入 89 辛烷值,然后等到剩下 ¼ 时加入 93 辛烷值。
以下是循环中的变化
if newgas == 89.0:
newgas = 93.0
o = 3*newgas/4 + o/4
else:
newgas = 89.0
o = 5*newgas/12 + 7*o/12
以下是从第十次加油开始的数字
10: 92.5122272978
11: 91.0487992571
12: 92.5121998143
13: 91.048783225
14: 92.5121958062
15: 91.048780887
正如你所看到的,这使得最终辛烷值始终略高于 91。当然,我的油表没有标记为十二分之一,但 7⁄12 略小于 5⁄8,我可以处理。
另一种简单的解决方案可能是将油箱开到空,然后加满 93 辛烷值,然后下次只加半箱 89 辛烷值——也许这将是我的默认计划。就我个人而言,我不喜欢将油箱开到完全没油,因为这并不总是方便。另一方面,这在长途旅行中很容易奏效。有时我买汽油是因为价格突然下降。所以在最后,这个方案是我可以考虑的一系列选项之一。
对于Python用户来说,最重要的事情:不要在驾驶时编码!
4 条评论