问题:一个球从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)))