在油泵使用 Python:一个用于加油的脚本

这是我如何使用 Python 发现一种经济高效的加油策略。
222 位读者喜欢这篇文章。
U.S. makes renewable energy software open source

Internet Archive Book Images。由 Opensource.com 修改。CC BY-SA 4.0

我最近开始驾驶一辆传统上使用高级汽油(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 辛烷值汽油,然后等到油箱 1⁄4 满时,加注 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 用户来说最重要的事情:不要在开车时编码!

标签
Greg Pittman
Greg 是肯塔基州路易斯维尔的一位退休神经科医生,长期以来对计算机和编程感兴趣,从 20 世纪 60 年代的 Fortran IV 开始。当 Linux 和开源软件出现时,它激发了学习更多知识的决心,并最终做出贡献。他是 Scribus 团队的成员。

4 条评论

非常酷也很实用。谢谢分享。

这里要小心。

当加油站进行混合或订购混合汽油时 - 辛烷值等级比你预期的要宽松一些。它可能在 93 或 89 的较低或较高范围内......它可能是 88.89 四舍五入。

其次,冬季混合汽油与夏季混合汽油相比,被粗暴地掺假,含有降低性能的化学成分。这是由于各种添加剂以防止凝胶等...

因此,你这个... 巧妙的工具可能会使你的发动机爆震更加严重,因为含有冬季添加剂的 89 辛烷值汽油比夏季 89 辛烷值汽油更糟糕。
除非你有东西可以查看 PID/AFR 等... 否则你很难知道...... 或者你没有像偷来的那样猛踩你的汽车,那么你可能真的不在乎 :)

// 对于强制喷射 - 你应该更加小心。

另一方面,人们应该多认真对待“爆震”的警告?它不会立即毁坏你的汽车。如果汽油公司出售 91 辛烷值汽油呢?按照你的逻辑,那可能或可能不是 91 辛烷值...... 有些人认为在只需要 87 辛烷值的汽车中加入 93 辛烷值汽油是在给他们的汽车“款待”。

回复 作者 Ron Brash (未验证)

这是一个后续,也许是一个警示性声明。在一定程度上遵循这个方法后,“检查发动机指示灯”亮起。这个 CEL 的问题在于它亮起的原因有很多,其中一个原因可能是汽油盖松动(而且这辆车似乎有汽油盖问题)。在观察了一段时间后,我加了 3/4 箱 93 辛烷值汽油,不久之后 CEL 就熄灭了。是由于汽油还是汽油盖?
我想到的一件事是,人们并不真正知道油箱中汽油的混合效果有多好,因此最终结果不一定是均匀的混合物,至少在一段时间内是这样。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.