练习篇
問題:一個球從100米高空落下,每次落地后反跳回原高度的一般落下,當(dāng)高度小于1米時視為停止,問這個球一共彈了多少米我的代碼:
#拓展一下,變成球的高度可以自定義,但要大于1米
def get_num(h):b = 0 #統(tǒng)計彈跳次數(shù)c = 0 #統(tǒng)計彈跳總高度數(shù)print('球的初始高度為:{} 米;'.format(h),end=' ')#由于事先并不知道到底球需要彈跳多少次,所以用while循序while True:if h < 1:print('您需要輸入一個大于1米的一個高度值')breakelse:h /= 2b += 1c += hif h < 1:return '彈跳次數(shù):{} 次; 視為停止時高度:{} 米; 總共彈跳的米數(shù){} 米'.format(b,h,c)print(get_num(4))
#測試結(jié)果:球的初始高度為:4 米; 彈跳次數(shù):3 次; 視為停止時高度:0.5 米; 總共彈跳的米數(shù)3.5 米print(get_num(100))
#測試結(jié)果:球的初始高度為:100 米; 彈跳次數(shù):7 次; 視為停止時高度:0.78125 米; 總共彈跳的米數(shù)99.21875 米print(get_num(0.9))
#測試結(jié)果:球的初始高度為:0.9 米; 您需要輸入一個大于1米的一個高度值
# None
可以考慮面向?qū)ο?#xff0c;,自定義一個球類,,? 1 #自定義一個球類 2 3 #實例化時需要兩個參數(shù):球的種類、初始高度 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 # 統(tǒng)計彈跳次數(shù) 29 c = 0 # 統(tǒng)計彈跳總高度數(shù) 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('彈跳次數(shù):{} 次; 視為停止時高度:{} 米; 總共彈跳的米數(shù){} 米'.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 #測試結(jié)果: 56 #球的種類為:pp; 球的初始高度為:1.5 米; 彈跳次數(shù):1 次; 視為停止時高度:0.8999999999999999 米; 總共彈跳的米數(shù)0.8999999999999999 米 57 #球的種類為:zq; 球的初始高度為:100 米; 彈跳次數(shù):7 次; 視為停止時高度:0.78125 米; 總共彈跳的米數(shù)99.21875 米 58 #球的種類為:lq; 球的初始高度為:30 米; 彈跳次數(shù):10 次; 視為停止時高度:0.8474257469999996 米; 總共彈跳的米數(shù)68.022673257 米
?
?我又思考了,,如果球的種類不一樣,,假設(shè)足球能彈跳回原高度的一半,籃球能彈跳回原高度的?0.7倍?等等
也就是說,拋的球不一樣,,?h?/=?2這里要變。。。可以考慮面向?qū)ο?#xff0c;,自定義一個球類,,? 1 #自定義一個球類 2 3 #實例化時需要兩個參數(shù):球的種類、初始高度 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 # 統(tǒng)計彈跳次數(shù) 29 c = 0 # 統(tǒng)計彈跳總高度數(shù) 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('彈跳次數(shù):{} 次; 視為停止時高度:{} 米; 總共彈跳的米數(shù){} 米'.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 #測試結(jié)果: 56 #球的種類為:pp; 球的初始高度為:1.5 米; 彈跳次數(shù):1 次; 視為停止時高度:0.8999999999999999 米; 總共彈跳的米數(shù)0.8999999999999999 米 57 #球的種類為:zq; 球的初始高度為:100 米; 彈跳次數(shù):7 次; 視為停止時高度:0.78125 米; 總共彈跳的米數(shù)99.21875 米 58 #球的種類為:lq; 球的初始高度為:30 米; 彈跳次數(shù):10 次; 視為停止時高度:0.8474257469999996 米; 總共彈跳的米數(shù)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)))?
轉(zhuǎn)載于:https://www.cnblogs.com/avention/p/8681240.html
總結(jié)
- 上一篇: Netty构建游戏服务器(一)--基本概
- 下一篇: 【Linux 线程】常用线程函数复习《三