【问题描述】


已知一球从高空落下时,每次落地后反弹至原高度的四分之一再落下。编写一程序,从键盘输入整数n和m, 求该球从n米的高空落下后,第m次落地时共经过的路程以及第m次落地后反弹的高度,并输出结果。 【输入形式】 从键盘输入整数n和m,以空格隔开。 【输出形式】 输出两行: 第一行输出总路程,保留小数点后两位; 第二行输出第m次落地后反弹的高度,保留小数点后两位。 【输入样例】 40 3 【输出样例】 65.00 0.63


我的实现方法:

python小球回弹 小球反弹高度python程序_保留小数点后两位

第17行:接收输入的数据,并且把数据放到列表里面

第18行:取出列表的第一个值,这个值代表是最开始的高度

第19行:取出列表的第二个值,这个值代表是第几次落地

第20行:设置变量sum用来记录路程,除了第一次的高度其他的高度都是要两倍,因为反弹后又落下,所以sum的初始值就是最初的高度。

循环的分析:

python小球回弹 小球反弹高度python程序_保留两位小数_02

注意:三次球落到地上只有两次路程要乘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去掉了

python小球回弹 小球反弹高度python程序_保留两位小数_03

一直保留两位小数我都是直接这样保留但是这里刚好是三位小数就没有进行四舍五入了,再拿0.626来试一下,跟三位小数无关,难道是五舍六入?

python小球回弹 小球反弹高度python程序_保留小数点后两位_04

然后这种情况就只能智取了,发现如果是四位小数并且最后一个小数不为0的话保留两位小数都是正常四舍五入的

python小球回弹 小球反弹高度python程序_数值是有三位小数如何保留两位并且四舍五入_05

python小球回弹 小球反弹高度python程序_python小球回弹_06

 

结论就是要保留几位小数的话就要原始的值要有四位全非零小数这样才会真正的四舍五入,并且添加最后一位非零小数并不会影响最后四舍五入的结果,添加只是为了能正常四舍五入。

python小球回弹 小球反弹高度python程序_四舍五入_07

这就是我第27行为什么加0.0001的原因

自己也是初学python,一直在摸索,在保留两位小数并且会正常的四舍五入的这里也百度了很多文章来看,但是发现他们都是由很多位小数保留两位小数的没有只是三位小数保留两位小数正常四舍五入的解答,也是自己经过很多的测试得出来的总结,希望能帮到跟我遇到同样困惑的人。