https://opensource.com/article/18/10/python-gas-pump
作者 | Greg Pittman
譯者 | Hank Chow (HankChow) ???共計翻譯:18.0 篇 貢獻時間:322 天
我來介紹一下我是如何使用 Python 來節省成本的。
我最近在開一輛燒 93 號汽油的車子。根據汽車製造商的說法,它只需要加 91 號汽油就可以了。然而,在美國只能買到 87 號、89 號、93 號汽油。而我家附近的汽油的物價水平是每增加一號,每加侖就要多付 30 美分,因此如果加 93 號汽油,每加侖就要多花 60 美分。為什麼不能節省一些錢呢?
一開始很簡單,只需要先加滿 93 號汽油,然後在油量表顯示油箱半滿的時候,用 89 號汽油加滿,就得到一整箱 91 號汽油了。但接下來就麻煩了,剩下半箱 91 號汽油加上半箱 93 號汽油,只會變成一箱 92 號汽油,再接下來呢?如果繼續算下去,只會越來越混亂。這個時候 Python 就派上用場了。
我的方案是,可以根據汽油的實時狀態,不斷向油箱中加入 93 號汽油或者 89 號汽油,而最終標的是使油箱內汽油的號數不低於 91。我需要做的是隻是透過一些演演算法來判斷新舊汽油混合之後的號數。使用多項式方程或許也可以解決這個問題,但如果使用 Python,好像只需要進行迴圈就可以了。
#!/usr/bin/env python
# octane.py
o = 93.0
newgas = 93.0 # 這個變數記錄上一次加入的汽油號數
i = 1
while i < 21: # 20 次迭代 (加油次數)
if newgas == 89.0: # 如果上一次加的是 89 號汽油,改加 93 號汽油
newgas = 93.0
o = newgas/2 + o/2 # 當油箱半滿的時候就加油
else: # 如果上一次加的是 93 號汽油,則改加 89 號汽油
newgas = 89.0
o = newgas/2 + o/2 # 當油箱半滿的時候就加油
print str(i) + ': '+ str(o)
i += 1
在程式碼中,我首先將變數 o
(油箱中的當前混合汽油號數)和變數 newgas
(上一次加入的汽油號數)的初始值都設為 93,然後迴圈 20 次,也就是分別加入 89 號汽油和 93 號汽油一共 20 次,以保持混合汽油號數穩定。
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 號汽油的量不同,也會趨於穩定。
因此,我嘗試了不同的比例,我認為加入的 93 號汽油需要比 89 號汽油更多一點。在儘量少補充新汽油的情況下,我最終計算到的結果是 89 號汽油要在油箱大約 7/12 滿的時候加進去,而 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。當然,我的油量表並沒有 1/12 的刻度,但是 7/12 略小於 5/8,我可以近似地計算。
一個更簡單地方案是每次都首先加滿 93 號汽油,然後在油箱半滿時加入 89 號汽油直到耗盡,這可能會是我的常規方案。就我個人而言,這種方法並不太好,有時甚至會產生一些麻煩。但對於長途旅行來說,這種方案會相對簡便一些。有時我也會因為油價突然下跌而購買一些汽油,所以,這個方案是我可以考慮的一系列選項之一。
當然最重要的是:開車不寫碼,寫碼不開車!
via: https://opensource.com/article/18/10/python-gas-pump
作者:Greg Pittman[2] 選題:lujun9972 譯者:HankChow 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出