想省油錢,你使用Python為你的油箱加油啊
我來介紹一下我是如何使用 Python 來節(jié)省成本的。
我最近在開一輛燒 93 號汽油的車子。根據(jù)汽車制造商的說法,它只需要加 91 號汽油就可以了。然而,在美國只能買到 87 號、89 號、93 號汽油。而我家附近的汽油的物價(jià)水平是每增加一號,每加侖就要多付 30 美分,因此如果加 93 號汽油,每加侖就要多花 60 美分。為什么不能節(jié)省一些錢呢?
一開始很簡單,只需要先加滿 93 號汽油,然后在油量表顯示油箱半滿的時(shí)候,用 89 號汽油加滿,就得到一整箱 91 號汽油了。但接下來就麻煩了,剩下半箱 91 號汽油加上半箱 93 號汽油,只會變成一箱 92 號汽油,再接下來呢?如果繼續(xù)算下去,只會越來越混亂。這個(gè)時(shí)候 Python 就派上用場了。
我的方案是,可以根據(jù)汽油的實(shí)時(shí)狀態(tài),不斷向油箱中加入 93 號汽油或者 89 號汽油,而最終目標(biāo)是使油箱內(nèi)汽油的號數(shù)不低于 91。我需要做的是只是通過一些算法來判斷新舊汽油混合之后的號數(shù)。使用多項(xiàng)式方程或許也可以解決這個(gè)問題,但如果使用 Python,好像只需要進(jìn)行循環(huán)就可以了。
#!/usr/bin/env python
# octane.py
o = 93.0
newgas = 93.0 # 這個(gè)變量記錄上一次加入的汽油號數(shù)
i = 1
while i < 21: # 20 次迭代 (加油次數(shù))
if newgas == 89.0: # 如果上一次加的是 89 號汽油,改加 93 號汽油
newgas = 93.0
o = newgas/2 + o/2 # 當(dāng)油箱半滿的時(shí)候就加油
else: # 如果上一次加的是 93 號汽油,則改加 89 號汽油
newgas = 89.0
o = newgas/2 + o/2 # 當(dāng)油箱半滿的時(shí)候就加油
print str(i) + ': '+ str(o)
i += 1
在代碼中,我首先將變量 o
(油箱中的當(dāng)前混合汽油號數(shù))和變量 newgas
(上一次加入的汽油號數(shù))的初始值都設(shè)為 93,然后循環(huán) 20 次,也就是分別加入 89 號汽油和 93 號汽油一共 20 次,以保持混合汽油號數(shù)穩(wěn)定。
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
從以上數(shù)據(jù)來看,只需要 10 到 15 次循環(huán),汽油號數(shù)就比較穩(wěn)定了,也相當(dāng)接近 91 號汽油的目標(biāo)。這種交替混合直到穩(wěn)定的現(xiàn)象看起來很有趣,每次交替加入同等量的不同號數(shù)汽油,都會趨于穩(wěn)定。實(shí)際上,即使加入的 89 號汽油和 93 號汽油的量不同,也會趨于穩(wěn)定。
因此,我嘗試了不同的比例,我認(rèn)為加入的 93 號汽油需要比 89 號汽油更多一點(diǎn)。在盡量少補(bǔ)充新汽油的情況下,我最終計(jì)算到的結(jié)果是 89 號汽油要在油箱大約 7/12 滿的時(shí)候加進(jìn)去,而 93 號汽油則要在油箱 ¼ 滿的時(shí)候才加進(jìn)去。
我的循環(huán)將會更改成這樣:
if newgas == 89.0:
newgas = 93.0
o = 3*newgas/4 + o/4
else:
newgas = 89.0
o = 5*newgas/12 + 7*o/12
以下是從第十次加油開始的混合汽油號數(shù):
10: 92.5122272978
11: 91.0487992571
12: 92.5121998143
13: 91.048783225
14: 92.5121958062
15: 91.048780887
如你所見,這個(gè)調(diào)整會令混合汽油號數(shù)始終略高于 91。當(dāng)然,我的油量表并沒有 1/12 的刻度,但是 7/12 略小于 5/8,我可以近似地計(jì)算。
一個(gè)更簡單地方案是每次都首先加滿 93 號汽油,然后在油箱半滿時(shí)加入 89 號汽油直到耗盡,這可能會是我的常規(guī)方案。就我個(gè)人而言,這種方法并不太好,有時(shí)甚至?xí)a(chǎn)生一些麻煩。但對于長途旅行來說,這種方案會相對簡便一些。有時(shí)我也會因?yàn)橛蛢r(jià)突然下跌而購買一些汽油,所以,這個(gè)方案是我可以考慮的一系列選項(xiàng)之一。
當(dāng)然最重要的是:開車不寫碼,寫碼不開車!