




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
模塊六:程序設計基礎《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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年貴州省存量房買賣合同
- 2025標準辦公樓租賃合同范本模板
- 2025商場物業管理合同示范文本
- 2025標準工業廠房租賃合同模板
- 2025茶葉店裝修設計合同協議書范本
- 2025營養品代理合同書
- (三模)2025年5月濰坊市高三高考模擬考試語文試卷(含答案)
- 靜脈輸液避光護理安全操作規范
- 護理基礎護理知識
- 斷指康復護理
- 設備安全操作培訓
- 社會學知識競賽(58道含答案)
- 壓力彈簧力度計算器及計算公式
- 職業衛生公告欄內容
- 如何進行主持傳播智慧樹知到答案章節測試2023年浙江傳媒學院
- 天津市各級醫療機構收費標準目錄doc-天津市各級醫療機構
- GB/T 3301-1999日用陶瓷的容積、口徑誤差、高度誤差、重量誤差、缺陷尺寸的測定方法
- 偷影子的人-大學語文PPT
- GB 6944-2005危險貨物分類和品名編號
- GB 4789.3-2016食品安全國家標準食品微生物學檢驗大腸菌群計數
- GB 11291-1997工業機器人安全規范
評論
0/150
提交評論