1. 程式人生 > >python中保留兩位小數之反彈高度

python中保留兩位小數之反彈高度

【問題描述】

已知一球從高空落下時,每次落地後反彈至原高度的四分之一再落下。編寫一程式,從鍵盤輸入整數n和m,
求該球從n米的高空落下後,第m次落地時共經過的路程以及第m次落地後反彈的高度,並輸出結果。
【輸入形式】
從鍵盤輸入整數n和m,以空格隔開。
【輸出形式】
輸出兩行:
第一行輸出總路程,保留小數點後兩位;
第二行輸出第m次落地後反彈的高度,保留小數點後兩位。
【輸入樣例】
40 3
【輸出樣例】
65.00
0.63

我的實現方法:

第17行:接收輸入的資料,並且把資料放到列表裡面

第18行:取出列表的第一個值,這個值代表是最開始的高度

第19行:取出列表的第二個值,這個值代表是第幾次落地

第20行:設定變數sum用來記錄路程,除了第一次的高度其他的高度都是要兩倍,因為反彈後又落下,所以sum的初始值就是最初的高度。

迴圈的分析:

注意:三次球落到地上只有兩次路程要乘2,第一次從四十米落下後反彈到10米的高度再從10米高度再落下,這裡10米就走了兩次。接下來的也是同樣道理。

1、小球最開始在40米高的地方落下,落下後反彈到上一個高度的四分之一,就是從40米落下球著地後反彈,反彈能到達的高度是40米的四分之一也就是10米,這時第一次落地後反彈球就在10的高度上了。這時總路程為40+10

2、接著球從10米地方落下後反彈到10米的四分之一的高度也就是2.5米,這時第二次落地後反彈,球的位置就在2.5米高度上了,這時總路程40+10+10+2.5

3、這時球從2.5米高處落下著地後再反彈到2.5的四分之一的高度也就是0.625米,這是第三次著地後反彈,球的位置這時在

0.625米高,所以球三次著地的總路程是40+10+10+2.5+2.5,第三次著地後反彈的高度是0.625

       但是輸出的結果要求保留兩位小數,python中保留兩位小數有很多方法,這裡介紹的是使用"%.2f"來保留某一個數的兩位小數,這裡自己經過多次不同資料的測試發現了一些規律,其實在自己百度的時候很多人都沒有說到關於保留兩位小數使用"%.2f"的四捨五入的不同情況的問題。

下面來說說在自己實踐的過程中發現的一些有趣的事:

要求:將0.625保留兩位小數,並且最終的答案應該輸出0.63

看到這裡,我首先想到的就是直接使用"%.2f"來進行保留兩位小數就可以了,但是經過試驗發現,結果並沒有進行四捨五入。而是直接把5去掉了

一直保留兩位小數我都是直接這樣保留但是這裡剛好是三位小數就沒有進行四捨五入了,再拿0.626來試一下,跟三位小數無關,難道是五舍六入?

然後這種情況就只能智取了,發現如果是四位小數並且最後一個小數不為0的話保留兩位小數都是正常四捨五入的

結論就是要保留幾位小數的話就要原始的值要有四位全非零小數這樣才會真正的四捨五入,並且新增最後一位非零小數並不會影響最後四捨五入的結果,新增只是為了能正常四捨五入。

這就是我第27行為什麼加0.0001的原因

自己也是初學python,一直在摸索,在保留兩位小數並且會正常的四捨五入的這裡也百度了很多文章來看,但是發現他們都是由很多位小數保留兩位小數的沒有隻是三位小數保留兩位小數正常四捨五入的解答,也是自己經過很多的測試得出來的總結,希望能幫到跟我遇到同樣困惑的人。