python基础加油站day16

发布时间:2021-8-7 9:11:42   点击数:
北京比较好湿疹医院 http://m.39.net/pf/a_9150611.html
?python基础加油站dayProjectile类

我们使用炮弹的例子,我们希望要一个可以代表抛物体的类。这个类需要一个构造方法来初始化实例变量,一个update方法来改变抛体的状态,以及getX和getY方法,以便我们得知当前的位置。

那么我们从构造方法开始吧。

在主程序中,我们需要用角度、速度和高度创建一个炮弹:

cball=Projectile(angle,vel,h0)

在Projectile必须有一个__init__方法,使用这些值来初始化cball的实例变量。但这些实例变量应该是什么?当然,它们包含xpos、ypos、xvel和yvel四种信息,表示炮弹飞行的一些特征。我们将使用原来程序中的相同公式来计算这些值。

下面是带有构造方法的类:

classProjectile:def__init__(self,angle,velocity,height):self.xpos=0.0self.ypos=heighttheta=math.radians(angle)self.xvel=velocity*math.cos(theta)self.yvel=velocity*math.sin(theta)

请注意使用self点表示的方法,在对象内创建了四个实例的变量。在__init__运行终止之后,就不需要theta的值,所以它只是一个普通的(局部的)函数变量。

获取抛体位置的方法很简单:

当前位置由实例变量xpos和ypos给出。我们只需要一些返回这些值的方法。

defgetX(self):returnself.xposdefgetY(self):returnself.ypos

最后,我们来看update方法。该方法接受一个普通参数,表示时间间隔。我们需要更新抛体的状态,以反映这段时间的流逝。

下面是代码:

defupdate(self,time):self.xpos=self.xpos+time*self.xvelyvel1=self.yvel-time*9.8self.ypos=self.ypos+time*(self.yvel+yvel1)/2.0self.yvel=yvel1

基本上,这是我们在原来程序中使用的代码,改成为使用和修改实例变量。注意使用yvel1作为临时(普通)变量。在方法最后一行,将该值存储到对象中,从而保存该新值。

这就完成了我们的抛体类。

我们现在有了一个完整的基于对象的解决方案,来解决炮弹问题:

frommathimportsin,cos,radiansclassProjectile:#定义炮弹飞行角度、速度和高度特征def__init__(self,angle,velocity,height):#设置初始值,就是定义数据类型self.xpos=0.0self.ypos=heighttheta=radians(angle)#公式计算值self.xvel=velocity*cos(theta)self.yvel=velocity*sin(theta)defupdate(self,time):self.xpos=self.xpos+time*self.xvelyvel1=self.yvel-9.8*timeself.ypos=self.ypos+time*(self.yvel+yvel1)/2.0self.yvel=yvel1#局部变量输入,返回。defgetY(self):returnself.yposdefgetX(self):returnself.xposdefgetInputs():#四变量设定a=float(input("Enterthelaunchangle(indegrees):"))v=float(input("Entertheinitialvelocity(inmeters/sec):"))h=float(input("Entertheinitialheight(inmeters):"))t=float(input("Enterthetimeintervalbetweenpositioncalculations:"))returna,v,h,tdefmain():#临时变量设定,重新保存。angle,vel,h0,time=getInputs()cball=Projectile(angle,vel,h0)whilecball.getY()=0:cball.update(time)print("\nDistancetraveled:{0:0.1f}meters.".format(cball.getX()))方法要根据内容来选择,要使用恰当的方法。预览时标签不可点收录于话题#个上一篇下一篇

欢迎转载,转载请注明原文网址:http://www.hnqianxun.com/lszz/16805.html

------分隔线----------------------------