本文和你一起探索Python编程经典案例,让你沉浸式学习Python。助你期末考试拿高分,拿到大厂的心仪offer。
你可以先自己拿着题目去思考有多少种不同的解题方法,然后再对照本文解题方法进行比较。
有不同的见解欢迎到公众号中跟我一起探讨。
本文目录
一、经典案例【考题】
问题:一个球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,求它再第5次弹起至最高点时,共经过多少米?第5次反弹多高?
输入:100, 5
输出:(290.625, 3.125)
其中290.625为球自由落体运动第5次弹至最高点时共经过的米数,3.125为第5次反弹的高度。
二、经典案例解题方法
方法一:应用for循环求出自由落体运动总长度和第n次反弹高度
首先来看下球从100米高自由落下,它的前几次运动轨迹是什么样的。
可以发现每一次球反弹都导致球弹起来的高度比上一次的高度缩短了一半,第五次弹至最高点的总长度为100+50✖2+25✖2+12.5✖2+6.25✖2+3.125=290.625。
通过for循环,模拟自由落体的运动轨迹,可以得到总长度和第n次反弹的高度。
具体代码如下:
def free_fall_game1(x, cnt):
'''
x:初始高度
cnt:第几次反弹
'''
high = x
sum_high = high
cur_high = 0
for i in range(cnt):
if i<cnt-1:
cur_high = high/2
sum_high += cur_high*2
high = high/2
else:
cur_high = high/2
sum_high += cur_high
high = high/2
return sum_high,cur_high
free_fall_game1(100, 5)
cur_high:表示当前反弹高度。
sum_high:表示运动总长度。
得到结果:
(290.625, 3.125)
其中290.625为球自由落体运动第5次落地时共经过的米数,3.125为第5次反弹的高度。
如对循环不是很理解,可先看下让你彻底弄懂【python循环语句】一文。
感兴趣的同学可以把代码复制到Python中,通过调节初始高度和落地次数,获取自由落体运动经过的总长度和第n次反弹高度。
方法二:应用while循环求出自由落体运动总长度和第n次反弹高度
假设问题微调成:一个球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,求它再第10次弹至最高点时,共经过多少米?第10次反弹多高?
原理类似,只不过用while循环模拟自由落体的运动轨迹,得到总长度和第n次反弹的高度。
具体代码如下:
def free_fall_game2(x, cnt):
'''
x:初始高度
cnt:第几次落地
'''
i = 1
sum = 0
while i<=cnt:
sum += x
x = x/2
sum += x
i += 1
return sum, x
free_fall_game2(100, 10)
得到结果:
(299.70703125, 0.09765625)
可以手动验证,两种方法得到的结果是一致的。
至此,Python中的编程经典案例【考题】之自由落体运动球的运动轨迹已讲解完毕。