《信息技术基础》课件 《模块六:程序设计基础》任务5_第1页
《信息技术基础》课件 《模块六:程序设计基础》任务5_第2页
《信息技术基础》课件 《模块六:程序设计基础》任务5_第3页
《信息技术基础》课件 《模块六:程序设计基础》任务5_第4页
《信息技术基础》课件 《模块六:程序设计基础》任务5_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

模块六:程序设计基础《Python》《信息技术基础》PWSO05面向对象程序设计知识目标1.了解面向对象的设计思想;2.能掌握类的定义和使用;3.能说出面向对象程序设计的基本流程。学习目标1.能够完成简单的面向对象程序设计。能力目标1.具有团队协作精神和创新意识;2.具备自主学习能力、分析和解决问题的能力。素质目标1任务描述2任务解析3知识链接4任务实施任务5面向对象程序设计5能力拓展人机猜拳游戏大家一定不陌生,猜拳游戏一般包括3种手势:石头、剪刀、布。判定规则为石头胜剪刀,剪刀胜布,布胜石头。请使用面向对象思想实现人机猜拳游戏。人机猜拳游戏涉及两个对象——玩家和计算机,玩家和计算机需根据规则进行游戏,首先设计人机猜拳游戏的界面,开始游戏后,玩家和计算机分别完成出拳,按照判定规则计分,输出对战结果,完成整个程序。面向对象程序设计概述类的定义与使用封装、继承、多态面向对象程序设计面向对象程序设计概述(一)面向对象程序设计思想1.类与对象的概念面向对象程序设计有两个重要概念:类和对象。对象映射了现实生活中真实存在的事物,它是看得见、摸得着的具体事物;类是抽象的,它是对一群具有相同特征和行为的事物的统称。面向对象程序设计概述(一)面向对象程序设计思想2.面向对象程序设计尽可能地模拟人类的思维方式,使软件的开发方法与过程尽可能地接近人类认识世界、解决现实问题的方法和过程,问题的描述与问题的解决方法在结构上尽可能一致,把客观世界中的实体抽象为问题域中的对象。以对象为核心,程序由一系列对象组成,整个程序就是各种对象的生成、调用、交互与销毁的过程。对象之间通过消息传递、相互通信来模拟现实世界中不同实体之间的联系。面向对象程序设计概述(二)面向对象程序设计的优缺点1.优点面向对象程序设计可以使程序的维护和扩展变得更加简单,大大提高了程序的开发效率。同时,面向对象程序设计使其他人更容易理解程序的代码逻辑,可读性强,因此易维护、易复用、易扩展。2.缺点面向对象程序设计无法像面向过程程序设计那样精准地预测问题的流程与结果,可控性差,性能比面向过程程序设计低,而且对硬件的要求高。类的定义与使用(一)类的定义Python使用class关键字定义类,class关键字之后要留一个空格,然后是类的名字,再后面是一个冒号,最后换行并定义类的内部实现。1.类定义语法格式2.说明(1)类名的首字母一定要大写。(2)属性(也叫作成员变量)类似前面学过的变量。class类名:属性名1=属性值1属性名2=属性值2…属性名n=属性值ndef方法名1(self,形参1,形参2,…,形参n):方法体def方法名2(self,形参1,形参2,…,形参n):方法体…类的定义与使用(3)方法类似前面学过的函数,可以看到在定义方法的参数列表中有一个“self”关键字,self关键字是方法定义的时候必须填写的,它表示类对象自身的意思,当使用类对象调用方法时,self会自动被Python传入,在方法内部要访问类的成员变量,必须使用self。 定义学生类,要求有姓名、性别、年龄、入学成绩4个属性。classStudent:name=Nonesex=Noneage=Nonescore=Nonedefsay(self):print(f"大家好,我是{},我{self.age}")类的定义与使用(二)对象的创建与使用1.对象的创建方法对象名=类名()例如,为前面定义的学生类定义对象,代码如下。student=Student()2.对象的使用方法属性的调用,语法格式:对象名.属性名方法的调用,语法格式:对象名.方法名()例如,、student.say()。类的定义与使用(三)类的成员使用详解1.属性(1)类属性。类属性是在类的内部、方法的外部的属性。类属性可以通过类或对象进行访问,但只能通过类进行修改。定义一个Cat类,其中foot为类属性,下面分别通过类、对象访问和修改foot属性,程序代码如下。(2)实例属性。实例属性是方法内部的属性,Python支持动态添加和修改实例属性。①访问实例属性。实例属性只能通过对象进行访问。②修改实例属性。实例属性只能通过对象进行修改。③添加实例属性。Python支持通过对象动态地添加实例属性,举例如下。类的定义与使用(三)类的成员使用详解1.属性(1)类属性。类属性是在类的内部、方法的外部的属性。类属性可以通过类或对象进行访问,但只能通过类进行修改。(2)实例属性。实例属性是方法内部的属性,包括:①访问实例属性;②修改实例属性;③添加实例属性。类的定义与使用(三)类的成员使用详解2.方法(1)实例方法。实例方法就是类的实例能够使用的方法,形似函数,定义在类的内部,以self为第一形参,实例化对象的时候,每个对象都拥有自己的实例方法,前面介绍的方法都属于实例方法。(2)类方法。类方法是类对象拥有的方法,它定义在类的内部、使用装饰器@classmethod修饰。(3)(3)静态方法。静态方法定义在类内部,使用装饰器@staticmethod修饰。类的定义与使用(三)类的成员使用详解3.私有成员类的成员默认是公有成员,为了保证类中数据的安全,Python支持将公有成员改为私有成员,在一定程度上限制在类的外部对类成员的访问。(1)定义类的成员时,如果成员的名称以“__”开头则表示是私有成员。(2)定义的私有成员在类的内部可以直接访问,在类的外部不能直接访问,但可以通过调用类的公有方法的方式进行访问。(3)在定义的类中增加一个公有方法test(),并访问私有属性__foot、调用私有方法__run()。类的定义与使用(四)类的特殊方法使用1.构造方法构造方法是类中定义的特殊方法,该方法负责在创建对象的同时对对象进行初始化。构造方法为__init__()。每个类都默认有一个构造方法,如果类中定义了一个显式的构造方法,那么创建对象时就调用显式的构造方法,否则调用默认的构造方法。(1)当使用无参构造方法创建对象时,所有对象的属性都有相同的初始值。(2)当使用有参构造方法创建对象时,所有对象的属性可以有不同的初始值。类的定义与使用(四)类的特殊方法使用2.析构方法析构方法,即__del__()方法,是销毁对象时系统自动调用的特殊方法。每个类默认都有一个析构方法,如果类中定义了一个显式的析构方法,那么销毁类的对象时调用的就是显式的析构方法,否则调用默认的析构方法。封装、继承、多态(一)封装封装是面向对象程序设计的重要特性之一。封装是指将属性和方法放到类内部,通过对象访问,隐藏功能的实现细节,当然还可以设置访问权限。封装的本质是将事物相关的属性和方法封装在一个类里面,不用知道类的实现细节,只需要使用公开接口便可以访问类的内容,故在一定程度上保证了类内数据的安全。为了契合封装思想,在定义类时需要满足以下两点要求。(1)将属性声明为私有属性。(2)添加两个供外界调用的公有方法set()和get(),分别用于设置和获取私有属性的值。封装、继承、多态(二)继承继承是面向对象程序设计的重要特征之一,它主要用于描述类与类之间的关系,在不改变原有类的基础上扩展原有类的功能。扩展后,原有类成为基类或父类,继承的类成为子类或派生类,子类需要复用父类里面的属性或者方法,子类还可以设置自己的属性和方法。1.单继承:单继承表示只有一个父类。2.多继承。3.方法重写:如果父类方法的功能不能满足需求,可以在子类中重写父类的方法。封装、继承、多态(三)多态多态也是面向对象程序设计的重要特征之一,它的直接作用是让不同类的同一功能可以通过同一个接口调用,并表现出不同的行为,举例如下。能不能满足需求,可以在子类中重写父类的方法。classDog:defshout(self):print("Iamadog")classCat:defshout(self):print("Iamacat")defshout(obj):obj.shout()dog=Dog()cat=Cat()shout(dog)shout(cat)运行结果如下。IamadogIamacat一、程序分析(一)程序过程分析(1)本程序涉及两个对象:玩家和计算机。(2)用数字表示石头、剪刀、布,规定1表示石头、2表示剪刀、3表示布。(3)游戏开始,玩家出拳,输入1~4的整数,输入4则退出游戏,输入除此之外的其他数字时,要求重新输入;计算机随机生成1~3的整数。一、程序分析(二)程序设计基本思路(1)本程序需定义玩家类Player、计算机类Computer、游戏类Game。(2)在玩家类Player中定义属性name和方法fist(),该方法负责对出拳的数字1、2、3进行解释。(3)计算机类和玩家类基本一样,但是计算机出拳是随机产生整数。(4)在游戏类中定义输出格式、开始方法、创建玩家对象和计算机对象、调用玩家和计算机类出拳方法、判断游戏结果、统计输赢次数、输出最后输赢结果。(5)玩家可以玩多次游戏,输入4则结束整个游戏。二、编写代码importrandom#人机猜拳游戏#定义计算机类classComputer:def__init__(self):="计算机"self.score=0

#定义计算机出拳方式deffist(self,num):ifnum==1:print("\t计算机出拳结果为:【石头】")elifnum==2:print("\t计算机出拳结果为:【剪刀】")elifnum==3:print("\t计算机出拳结果为:【布】")二、编写代码#定义玩家类classPlayer:def__init__(self):="玩家"self.score=0#self.num=num

#定义玩家出拳方式deffist(self,num):ifnum==1:print("\t玩家出拳结果为:【石头】")elifnum==2:print("\t玩家出拳结果为:【剪刀】")elifnum==3:print("\t玩家出拳结果为:【布】")二、编写代码#定义游戏类classGame:nums=0#界面设计print("*******************************************************")print("******")print("***欢迎参加人机猜拳游戏***")print("***

***")print("***游戏规则:计算机随机产生1、2、3

***")print("***1:石头2:剪刀3:布

***")print("***判定规则为石头胜剪刀,剪刀胜布,布胜石头

***")print("*******************************************************")二、编写代码print("现在开始游戏")print("请选择您的出拳方式:1:石头2:剪刀3:布4:退出游戏")print("-------------------------------------------------")playerfist=int(input("您选择的出拳方式为:"))#创建玩家对象并传入玩家输入的参数player=Player()二、编写代码#创建计算机对象computer=Computer()whileTrue:player.fist(playerfist)#获取随机数1、2、3rand_num=random.randint(1,3)#将随机数传入计算机类的fist方法computer.fist(rand_num)

ifplayerfist==1:ifrand_num==1:print("\t本局平局")elifrand_num==2:print("\t本局玩家获胜")player.score+=1elifrand_num==3:print("\t本局计算机获胜")二、编写代码computer.score+=1nums+=1elifplayerfist==2:ifrand_num==1:print("\t本局计算机获胜")computer.score+=1elifrand_num==2:print("\t本局平局")elifrand_num==3:print("\t本局玩家获胜")

player.score+=1nums+=1elifplayerfist==3:ifrand_num==1:print("\t本局玩家获胜")player.score+=1elifrand_num==2:print("\t本局计算机获胜")二、编写代码computer.score+=1elifrand_num==3:print("\t本局平局")nums+=1elifplayerfist==4:print("\t你选择4,已经退出游戏了")breakelse:print("\t输入错误,请重新开始!!!")print("-------------------------------")

ifplayer.score>computer.score:print(f"\t本轮对战{nums}次,玩家赢{player.score}次,计算机赢{computer.score}次,玩家赢")elifplayer.score<computer.score:print(f"\t本轮对战{nums}次,玩家赢{player.score}次,计算机赢{computer.score}次,计算机赢")else:print(f"\t本轮对战{nums}次,玩家赢{player.score}次,计算机赢{computer.score}次,平局")game=Game()三、运行结果**********************************************************

******欢迎参加人机猜拳游戏

******

******游戏规则:计算机随机产生1、2、3

******1:石头

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论