一款简单自动运行小游戏模拟:在一维的地图上,有一只虫子和一只蚂蚁。每一次他们都走过一个-3,-2,+2,+3个随机单位的距离(选定走法,若达到地图边界则放弃移动)。当蚂蚁,虫子处于同一位置时,蚂蚁吃掉虫子,程序结束。面向过程:import random ant_point=random.randint(0,20)worm_point=random.randint(0,20)print ‘ant_point:‘,ant_point,‘worm_point:‘,worm_point step=[-2,+2,-3,+3] while ant_point !=worm_point: astep=random.choice(step) if 0 <=ant_point+astep<=20: ant_point+=astep astep=random.choice(step) if 0<=worm_point+astep<=20: worm_point+=astep print ‘ant_point:‘,ant_point,‘worm_point:‘,worm_point random.randint(a,b):用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,Python生成随机数; random.choice():choice() 方法返回一个列表,元组或字符串的随机项。 面向对象:import random
class Sprite: step=[-2,+2,-3,+3] def __init__(self,gm,point=None): self.gm=gm if point is None: self.point=random.randint(0,20) else: self.point=point def jump(self): astep=random.choice(Sprite.step) if 0<=self.point+astep<=20: self.point+=astep class Ant(Sprite): def __init__(self,gm,point=None): super().__init__(gm,point) self.gm.set_point(‘ant‘,self.point) def jump(self): super().jump() self.gm.set_point(‘ant‘,self.point) class Worm(Sprite): def __init__(self,gm,point=None): super().__init__(gm,point) self.gm.set_point(‘worm‘,self.point) def jump(self): super().jump() self.gm.set_point(‘worm‘,self.point) class GameMap: def __init__(self): self.ant_point=None self.worm_point=None def catched(self): print ‘ant:‘,self.ant_point,‘worm‘,self.worm_point if self.ant_point is not None and self.worm_point is not None and self.ant_point==self.worm_point: return True def set_point(self,src,point): if src==‘ant‘: self.ant_point=point if src==‘worm‘: self.worm_point=point if __name__==‘__main__‘: gm=GameMap() worm=Worm(gm) ant=Ant(gm) while not gm.catched(): worm.jump() ant.jump() 实例属性:类被实例化以后才会具有的属性,一般在__init__()方法中创建并初始化,直接使用即定义:self.<属性名>,引用方法:self.<属性名>,self用来代表类的实例的,类外用实例名.属性名方式定义和引用,相同类的不同实例其实例属性不相关,一般不建议在__init__()方法之外创建和初始化实例属性,一般不推荐类外定义和修改,修改可以单独定义方法。
类属性:类定义后就存在,而且不需要实例化类属性使的相同类的不同实例共同持有相同变量 私有属性:不提供限制访问属性的关键字(无法限制类的各种属性在类外直接访问)使用__开头的变量名加以标识,只有类对象自己才能访问使用_开头的变量名加以标识,应该只有类对象及其子类才能访问(非强制性),在外部仍能访问 特殊属性:保存对象的元数据:__doc__,__name__,__dict__,__module__,__base__ 作业:定义一个类Box,具有实例属性长度(length),宽度(width),高度(height)。具有私有属性体积(由长宽高计算得来),并且它的每个实例可以知道它被实例化的数量。然后实例化它们五次,并输出每个实例的所有属性。
时间: 2024-08-08 18:11:12