t,s=100,0
for i in range(10):
s+=3/2*t
t=t/2
print(s-t,t)
299.609375 0.09765625
上述程序中, t是小球原来的高度,3/2*t是每次下落再弹起的高度,第10落地反弹的高度也被计算在内,所以s-t,是减去反弹的高度,题目首先求的是10次落地的经过的距离。
t,s=100,0
for i in range(1,11):
if i==1:
s=s+t
else:
s=s+2*t
t=t/2
print(f"{i}次:经过{s}米,反弹高度{t}")
1次:经过100米,反弹高度50.0
2次:经过200.0米,反弹高度25.0
3次:经过250.0米,反弹高度12.5
4次:经过275.0米,反弹高度6.25
5次:经过287.5米,反弹高度3.125
6次:经过293.75米,反弹高度1.5625
7次:经过296.875米,反弹高度0.78125
8次:经过298.4375米,反弹高度0.390625
9次:经过299.21875米,反弹高度0.1953125
10次:经过299.609375米,反弹高度0.09765625
上述程序,把第一次拿出来单独算s+t,第一次只有落下(100米),其它次有弹起落地的动作s+2t。
s,t = 0,100
func = lambda s, t: [s+t, t/2] if t == 100 else [s+2*t, t/2]
for i in range(1,11):
s,t=func(s,t)
print(f"第{i}次落地: s={s:.6f}, 反弹高度t={t:.6f}")
第1次落地: s=100.000000, 反弹高度t=50.000000
第2次落地: s=200.000000, 反弹高度t=25.000000
第3次落地: s=250.000000, 反弹高度t=12.500000
第4次落地: s=275.000000, 反弹高度t=6.250000
第5次落地: s=287.500000, 反弹高度t=3.125000
第6次落地: s=293.750000, 反弹高度t=1.562500
第7次落地: s=296.875000, 反弹高度t=0.781250
第8次落地: s=298.437500, 反弹高度t=0.390625
第9次落地: s=299.218750, 反弹高度t=0.195312
第10次落地: s=299.609375, 反弹高度t=0.097656

被折叠的 条评论
为什么被折叠?



