Python练习题 015:一颗自由落地的球

【Python练习题 015】 一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高?

----------------------------------------------------------

这题其实都可以笔算出来,因为也就是落地10次。看网上给出的结果也是五花八门,也不知道自己算的对不对,请大神们赐教。

我的思路是:除了第1次从100米高度落下,其余的9次都经历了“反弹-落地”的过程,每个过程来回走过的长度相当于上一个过程的高度。因此,把第1个过程初始化并赋值,从第2个过程开始,先次上一个过程的高度计算进去,再将高度减半,传递给下一个过程进行计算。代码如下:

a = [100]  #每个‘反弹落地’过程经过的路程,第1次只有落地(100米)
h = 100  #每个‘反弹落地’过程,反弹的高度,第1次为100米
print('第1次从%s米高落地,走过%s米,之后又反弹至%s米。' % (h, a[0], h/2))
for i in range(2,11):  #第1次已初始化,再循环9次
    a.append(h)  #先计算路程,再高度减半,因为一个‘反弹落地’为2个高度
    h = h / 2
    print('第%s次从%s米高落地,共走过%s米,之后又反弹至%s米。' % (i, h, sum(a), h / 2))

输出结果如下:

第1次从100米高落地,走过100米,之后又反弹至50.0米。

第2次从50.0米高落地,共走过200米,之后又反弹至25.0米。

第3次从25.0米高落地,共走过250.0米,之后又反弹至12.5米。

第4次从12.5米高落地,共走过275.0米,之后又反弹至6.25米。

第5次从6.25米高落地,共走过287.5米,之后又反弹至3.125米。

第6次从3.125米高落地,共走过293.75米,之后又反弹至1.5625米。

第7次从1.5625米高落地,共走过296.875米,之后又反弹至0.78125米。

第8次从0.78125米高落地,共走过298.4375米,之后又反弹至0.390625米。

第9次从0.390625米高落地,共走过299.21875米,之后又反弹至0.1953125米。

第10次从0.1953125米高落地,共走过299.609375米,之后又反弹至0.09765625米。

即:第10次落地时,共走过了299.609375米,第11次反弹至0.09765625米的高度。

++++++++++++++++++++++++++++++++++++++

题目出处:编程语言入门经典100例【Python版】