python2.7练习小例子(十九)

    19):题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

 

#!/usr/bin/python
# -*- coding: UTF-8 -*-

tour = []
height = []
 
hei = 100.0 # 起始高度
tim = 10 # 次数
 
for i in range(1, tim + 1):
    # 从第二次开始,落地时的距离应该是反弹高度乘以2(弹到最高点再落下)
    if i == 1:
        tour.append(hei)
    else:
        tour.append(2*hei) 
    hei /= 2
    height.append(hei)
 
print('总高度:tour = {0}'.format(sum(tour)))
print('第10次反弹高度:height = {0}'.format(height[-1]))

    以上实例输出结果为:

 

总高度:tour = 299.609375
10次反弹高度:height = 0.09765625

    Python3 参考方案:

 

#!/usr/bin/python3

hei = 100         # 总高度
tim = 10          # 次数
height = []       # 每次反弹高度
for i in range(2,tim+1):  # 计算第二次落地到第十次落地
    hei /= 2
    height.append(hei)
print('第10次落地时,反弹%s高'%(min(height)/2))        # 第十次反弹为第十次落地距离的一半
print('第10次落地时,经过%s米'% (sum(height)*2+100))   # 总和加上第一次的 100

    输出结果为:

 

10次落地时,反弹0.09765625
10次落地时,经过299.609375

    Python3 参考方案:

 

#!/usr/bin/python3

l=[]
r=10
t=100             # 第一次落地经过距离
sum=0
while r>1:        # 计算第二次落地到第十次落地每次的高度
    t=t/2
    r=r-1
    l.append(t)
for k in range(0,9):       # 列表只有 9 条数据
    if k==8:
        print(l[k]/2)        # 第10次反弹高度
    sum+=l[k]
sum=sum*2
sum=sum+100
print(sum)

    Python3 测试实例:

 

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

sum = 0
total = 0
for i in range(1, 10):
    sum = (100 * 2) / (2 ** i)
    total += sum
result = 100 + total
tenth = 100 / (2 ** 10)
print('第10次反弹高度: {}'.format(tenth))
print('第10次反弹后,一共经历的距离: {}'.format(result))

    

#!/usr/bin/python
# -*- coding: UTF-8 -*-

m=100
n=input("请输入反弹次数:")
total=[]
l=[]
for i in range(1,n+1):
    if i==1:
        total.append(m)
    else:
        total.append(2*m)
    m=0.5*m
    l.append(m)
print l
print total
print "第%d次反弹的高度是:%f"%(n,l[n-1])
print "第%d次落地共经过%f米"%(n,sum(total))

    Python3 参考方法:

 

#!/usr/bin/env python3

long = 100
sum = 100
for i in range(2, 11):
    sum = sum + long
    long = long / 2
    print("第%d次,经过%f米,反弹高度为%f" % (i, sum, long/2))

    

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# h 为初始高度,k 为每次弹起的高度比例,如本题弹起一半即为 0.5,n 为反弹次数
def Sumh(h,k,n):
    L = []
    for i in range(1,n+1):
        h *= k
        totalh = h * 3
        L.append(totalh)
    print h
    print sum(L) - h  # 第 10 次落地高度,要去除最后一次反弹
Sumh(100,0.5,10)

    Python3 参考方法:使用递归生成每一次反弹的高度,其中参数为第几次反弹,如n=1时,第一次反弹高度为height(1)=50:

 

#!/usr/bin/python3

def height(n):
    if n==0 :
        return 100
    else:
        return height(n-1)/2

sum=0
count=10
for i in range(0,count):
    if i==0:
        sum=sum+height(i)
    else:
        sum=sum+2*height(i)
    #print(height(i))

print(sum)
print(height(10))

    

a = 100.00
b=0.0
print a/(2**10)
for i in range(0,10):
    b,a = b+2*a, a/2
print b -100

    Python3 测试实例:

 

h=100
t=10
height=[100]
for i in range(t):
    height.append(h)
    h=h/2
print(height)
print('总高度:',sum(height[:10]),'第10次反弹高度 height[10]:',height[10]/2)

    

from __future__ import division

height = 100
n = 10
tour = 0
psum = pow(2,10)
bnce10 = 100/psum
print bnce10
for i in range(1,10):
    #print tour
    tour += 2*(100/pow(2,i))
tour = height + tour
print "tour=%f"%tour

    兼容 Python3.x 与 Python2.x:

 

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import math

# 设落地n次

n = int(input("请输入反弹次数:"))
height = 100
print("第  {} 次落地共: {:<8}米".format(n,height*(3-math.pow(2,-(n-2)))))
print("第  {} 次  反  弹: {:<8}米".format(n,height*math.pow(2, -(n))))

    这个物理不好的,估计得费点脑子了。如果感觉不错的话,请多多点赞支持哦。。。

  原文链接:https://blog.csdn.net/luyaran/article/details/80063256

posted @ 2018-04-25 13:10  luyaran  阅读(306)  评论(0编辑  收藏  举报