练习篇

问题:一个球从100米高空落下,每次落地后反跳回原高度的一般落下,当高度小于1米时视为停止,问这个球一共弹了多少米


我的代码:
#拓展一下,变成球的高度可以自定义,但要大于1米
def get_num(h):

    b = 0   #统计弹跳次数
    c = 0   #统计弹跳总高度数

    print('球的初始高度为:{} 米;'.format(h),end='  ')

    #由于事先并不知道到底球需要弹跳多少次,所以用while循序
    while True:
        if h < 1:
            print('您需要输入一个大于1米的一个高度值')
            break
        else:
            h /= 2
            b += 1
            c += h
            if h < 1:
                return '弹跳次数:{} 次; 视为停止时高度:{} 米; 总共弹跳的米数{} 米'.format(b,h,c)

print(get_num(4))
#测试结果:球的初始高度为:4 米;  弹跳次数:3 次; 视为停止时高度:0.5 米; 总共弹跳的米数3.5 米

print(get_num(100))
#测试结果:球的初始高度为:100 米;  弹跳次数:7 次; 视为停止时高度:0.78125 米; 总共弹跳的米数99.21875 米

print(get_num(0.9))
#测试结果:球的初始高度为:0.9 米;  您需要输入一个大于1米的一个高度值
#          None

 

 我又思考了,,如果球的种类不一样,,假设足球能弹跳回原高度的一半,篮球能弹跳回原高度的 0.7倍 等等

也就是说,抛的球不一样,, h /= 2这里要变。。。
可以考虑面向对象,,自定义一个球类,, 
 
 1 #自定义一个球类
 2 
 3 #实例化时需要两个参数:球的种类、初始高度
 4 
 5 class Ball(object):
 6 
 7     def __init__(self,wball,hight):
 8 
 9         if wball in ('pp','zq','lq'):
10             self._wball = wball
11         else:
12             print('请输入 pp zq lq 中的其中一种')
13             return
14 
15         self.hight = hight
16 
17     #由于每种球的弹跳效率不一样,所以需要定义一个方法还获取求的弹跳率
18     def _getlv(self):
19 
20         d = {'pp':0.6,'zq':0.5,'lq':0.7}
21 
22         return d.get(self._wball)
23 
24 
25     #定义一个方法进行弹跳计算,由于该方法是需要被类的实例访问的,所以不能定义为私有方法
26     def get_num(self):
27 
28         b = 0  # 统计弹跳次数
29         c = 0  # 统计弹跳总高度数
30         print('球的种类为:{}; 球的初始高度为:{} 米;'.format(self._wball,self.hight), end='  ')
31 
32         while True:
33             if self.hight < 1:
34                 print('您需要输入一个大于1米的一个高度值')
35                 break
36 
37             else:
38                 self.hight *= self._getlv()
39                 b += 1
40                 c += self.hight
41                 if self.hight < 1:
42                     return print('弹跳次数:{} 次; 视为停止时高度:{} 米; 总共弹跳的米数{} 米'.format(b, self.hight, c))
43 
44 
45 if __name__ == '__main__':
46     pingp = Ball('pp',1.5)
47     pingp.get_num()
48 
49     zuq = Ball('zq',100)
50     zuq.get_num()
51 
52     lanq = Ball('lq',30)
53     lanq.get_num()
54 
55 #测试结果:
56 #球的种类为:pp; 球的初始高度为:1.5 米;  弹跳次数:1 次; 视为停止时高度:0.8999999999999999 米; 总共弹跳的米数0.8999999999999999 米
57 #球的种类为:zq; 球的初始高度为:100 米;  弹跳次数:7 次; 视为停止时高度:0.78125 米; 总共弹跳的米数99.21875 米
58 #球的种类为:lq; 球的初始高度为:30 米;  弹跳次数:10 次; 视为停止时高度:0.8474257469999996 米; 总共弹跳的米数68.022673257 米

 

 

1 a=[100]
2 while a[-1]>1:
3     a.append(a[-1]*0.5)
4 print(a)
5 print("初始高度为{}米, 视停止高度为{}米;".format(a[0],a[-1]))
6 print("一共弹{}米,弹了{}次".format(sum(a[1:]),(len(a)-1)))

 

posted @ 2018-03-31 10:39  Avention  阅读(224)  评论(0编辑  收藏  举报