版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
模塊六:程序設(shè)計(jì)基礎(chǔ)《Python》《信息技術(shù)基礎(chǔ)》PWSO05面向?qū)ο蟪绦蛟O(shè)計(jì)知識(shí)目標(biāo)1.了解面向?qū)ο蟮脑O(shè)計(jì)思想;2.能掌握類的定義和使用;3.能說出面向?qū)ο蟪绦蛟O(shè)計(jì)的基本流程。學(xué)習(xí)目標(biāo)1.能夠完成簡單的面向?qū)ο蟪绦蛟O(shè)計(jì)。能力目標(biāo)1.具有團(tuán)隊(duì)協(xié)作精神和創(chuàng)新意識(shí);2.具備自主學(xué)習(xí)能力、分析和解決問題的能力。素質(zhì)目標(biāo)1任務(wù)描述2任務(wù)解析3知識(shí)鏈接4任務(wù)實(shí)施任務(wù)5面向?qū)ο蟪绦蛟O(shè)計(jì)5能力拓展人機(jī)猜拳游戲大家一定不陌生,猜拳游戲一般包括3種手勢:石頭、剪刀、布。判定規(guī)則為石頭勝剪刀,剪刀勝布,布勝石頭。請(qǐng)使用面向?qū)ο笏枷雽?shí)現(xiàn)人機(jī)猜拳游戲。人機(jī)猜拳游戲涉及兩個(gè)對(duì)象——玩家和計(jì)算機(jī),玩家和計(jì)算機(jī)需根據(jù)規(guī)則進(jìn)行游戲,首先設(shè)計(jì)人機(jī)猜拳游戲的界面,開始游戲后,玩家和計(jì)算機(jī)分別完成出拳,按照判定規(guī)則計(jì)分,輸出對(duì)戰(zhàn)結(jié)果,完成整個(gè)程序。面向?qū)ο蟪绦蛟O(shè)計(jì)概述類的定義與使用封裝、繼承、多態(tài)面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)概述(一)面向?qū)ο蟪绦蛟O(shè)計(jì)思想1.類與對(duì)象的概念面向?qū)ο蟪绦蛟O(shè)計(jì)有兩個(gè)重要概念:類和對(duì)象。對(duì)象映射了現(xiàn)實(shí)生活中真實(shí)存在的事物,它是看得見、摸得著的具體事物;類是抽象的,它是對(duì)一群具有相同特征和行為的事物的統(tǒng)稱。面向?qū)ο蟪绦蛟O(shè)計(jì)概述(一)面向?qū)ο蟪绦蛟O(shè)計(jì)思想2.面向?qū)ο蟪绦蛟O(shè)計(jì)盡可能地模擬人類的思維方式,使軟件的開發(fā)方法與過程盡可能地接近人類認(rèn)識(shí)世界、解決現(xiàn)實(shí)問題的方法和過程,問題的描述與問題的解決方法在結(jié)構(gòu)上盡可能一致,把客觀世界中的實(shí)體抽象為問題域中的對(duì)象。以對(duì)象為核心,程序由一系列對(duì)象組成,整個(gè)程序就是各種對(duì)象的生成、調(diào)用、交互與銷毀的過程。對(duì)象之間通過消息傳遞、相互通信來模擬現(xiàn)實(shí)世界中不同實(shí)體之間的聯(lián)系。面向?qū)ο蟪绦蛟O(shè)計(jì)概述(二)面向?qū)ο蟪绦蛟O(shè)計(jì)的優(yōu)缺點(diǎn)1.優(yōu)點(diǎn)面向?qū)ο蟪绦蛟O(shè)計(jì)可以使程序的維護(hù)和擴(kuò)展變得更加簡單,大大提高了程序的開發(fā)效率。同時(shí),面向?qū)ο蟪绦蛟O(shè)計(jì)使其他人更容易理解程序的代碼邏輯,可讀性強(qiáng),因此易維護(hù)、易復(fù)用、易擴(kuò)展。2.缺點(diǎn)面向?qū)ο蟪绦蛟O(shè)計(jì)無法像面向過程程序設(shè)計(jì)那樣精準(zhǔn)地預(yù)測問題的流程與結(jié)果,可控性差,性能比面向過程程序設(shè)計(jì)低,而且對(duì)硬件的要求高。類的定義與使用(一)類的定義Python使用class關(guān)鍵字定義類,class關(guān)鍵字之后要留一個(gè)空格,然后是類的名字,再后面是一個(gè)冒號(hào),最后換行并定義類的內(nèi)部實(shí)現(xiàn)。1.類定義語法格式2.說明(1)類名的首字母一定要大寫。(2)屬性(也叫作成員變量)類似前面學(xué)過的變量。class類名:屬性名1=屬性值1屬性名2=屬性值2…屬性名n=屬性值ndef方法名1(self,形參1,形參2,…,形參n):方法體def方法名2(self,形參1,形參2,…,形參n):方法體…類的定義與使用(3)方法類似前面學(xué)過的函數(shù),可以看到在定義方法的參數(shù)列表中有一個(gè)“self”關(guān)鍵字,self關(guān)鍵字是方法定義的時(shí)候必須填寫的,它表示類對(duì)象自身的意思,當(dāng)使用類對(duì)象調(diào)用方法時(shí),self會(huì)自動(dòng)被Python傳入,在方法內(nèi)部要訪問類的成員變量,必須使用self。 定義學(xué)生類,要求有姓名、性別、年齡、入學(xué)成績4個(gè)屬性。classStudent:name=Nonesex=Noneage=Nonescore=Nonedefsay(self):print(f"大家好,我是{},我{self.age}")類的定義與使用(二)對(duì)象的創(chuàng)建與使用1.對(duì)象的創(chuàng)建方法對(duì)象名=類名()例如,為前面定義的學(xué)生類定義對(duì)象,代碼如下。student=Student()2.對(duì)象的使用方法屬性的調(diào)用,語法格式:對(duì)象名.屬性名方法的調(diào)用,語法格式:對(duì)象名.方法名()例如,、student.say()。類的定義與使用(三)類的成員使用詳解1.屬性(1)類屬性。類屬性是在類的內(nèi)部、方法的外部的屬性。類屬性可以通過類或?qū)ο筮M(jìn)行訪問,但只能通過類進(jìn)行修改。定義一個(gè)Cat類,其中foot為類屬性,下面分別通過類、對(duì)象訪問和修改foot屬性,程序代碼如下。(2)實(shí)例屬性。實(shí)例屬性是方法內(nèi)部的屬性,Python支持動(dòng)態(tài)添加和修改實(shí)例屬性。①訪問實(shí)例屬性。實(shí)例屬性只能通過對(duì)象進(jìn)行訪問。②修改實(shí)例屬性。實(shí)例屬性只能通過對(duì)象進(jìn)行修改。③添加實(shí)例屬性。Python支持通過對(duì)象動(dòng)態(tài)地添加實(shí)例屬性,舉例如下。類的定義與使用(三)類的成員使用詳解1.屬性(1)類屬性。類屬性是在類的內(nèi)部、方法的外部的屬性。類屬性可以通過類或?qū)ο筮M(jìn)行訪問,但只能通過類進(jìn)行修改。(2)實(shí)例屬性。實(shí)例屬性是方法內(nèi)部的屬性,包括:①訪問實(shí)例屬性;②修改實(shí)例屬性;③添加實(shí)例屬性。類的定義與使用(三)類的成員使用詳解2.方法(1)實(shí)例方法。實(shí)例方法就是類的實(shí)例能夠使用的方法,形似函數(shù),定義在類的內(nèi)部,以self為第一形參,實(shí)例化對(duì)象的時(shí)候,每個(gè)對(duì)象都擁有自己的實(shí)例方法,前面介紹的方法都屬于實(shí)例方法。(2)類方法。類方法是類對(duì)象擁有的方法,它定義在類的內(nèi)部、使用裝飾器@classmethod修飾。(3)(3)靜態(tài)方法。靜態(tài)方法定義在類內(nèi)部,使用裝飾器@staticmethod修飾。類的定義與使用(三)類的成員使用詳解3.私有成員類的成員默認(rèn)是公有成員,為了保證類中數(shù)據(jù)的安全,Python支持將公有成員改為私有成員,在一定程度上限制在類的外部對(duì)類成員的訪問。(1)定義類的成員時(shí),如果成員的名稱以“__”開頭則表示是私有成員。(2)定義的私有成員在類的內(nèi)部可以直接訪問,在類的外部不能直接訪問,但可以通過調(diào)用類的公有方法的方式進(jìn)行訪問。(3)在定義的類中增加一個(gè)公有方法test(),并訪問私有屬性__foot、調(diào)用私有方法__run()。類的定義與使用(四)類的特殊方法使用1.構(gòu)造方法構(gòu)造方法是類中定義的特殊方法,該方法負(fù)責(zé)在創(chuàng)建對(duì)象的同時(shí)對(duì)對(duì)象進(jìn)行初始化。構(gòu)造方法為__init__()。每個(gè)類都默認(rèn)有一個(gè)構(gòu)造方法,如果類中定義了一個(gè)顯式的構(gòu)造方法,那么創(chuàng)建對(duì)象時(shí)就調(diào)用顯式的構(gòu)造方法,否則調(diào)用默認(rèn)的構(gòu)造方法。(1)當(dāng)使用無參構(gòu)造方法創(chuàng)建對(duì)象時(shí),所有對(duì)象的屬性都有相同的初始值。(2)當(dāng)使用有參構(gòu)造方法創(chuàng)建對(duì)象時(shí),所有對(duì)象的屬性可以有不同的初始值。類的定義與使用(四)類的特殊方法使用2.析構(gòu)方法析構(gòu)方法,即__del__()方法,是銷毀對(duì)象時(shí)系統(tǒng)自動(dòng)調(diào)用的特殊方法。每個(gè)類默認(rèn)都有一個(gè)析構(gòu)方法,如果類中定義了一個(gè)顯式的析構(gòu)方法,那么銷毀類的對(duì)象時(shí)調(diào)用的就是顯式的析構(gòu)方法,否則調(diào)用默認(rèn)的析構(gòu)方法。封裝、繼承、多態(tài)(一)封裝封裝是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特性之一。封裝是指將屬性和方法放到類內(nèi)部,通過對(duì)象訪問,隱藏功能的實(shí)現(xiàn)細(xì)節(jié),當(dāng)然還可以設(shè)置訪問權(quán)限。封裝的本質(zhì)是將事物相關(guān)的屬性和方法封裝在一個(gè)類里面,不用知道類的實(shí)現(xiàn)細(xì)節(jié),只需要使用公開接口便可以訪問類的內(nèi)容,故在一定程度上保證了類內(nèi)數(shù)據(jù)的安全。為了契合封裝思想,在定義類時(shí)需要滿足以下兩點(diǎn)要求。(1)將屬性聲明為私有屬性。(2)添加兩個(gè)供外界調(diào)用的公有方法set()和get(),分別用于設(shè)置和獲取私有屬性的值。封裝、繼承、多態(tài)(二)繼承繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特征之一,它主要用于描述類與類之間的關(guān)系,在不改變?cè)蓄惖幕A(chǔ)上擴(kuò)展原有類的功能。擴(kuò)展后,原有類成為基類或父類,繼承的類成為子類或派生類,子類需要復(fù)用父類里面的屬性或者方法,子類還可以設(shè)置自己的屬性和方法。1.單繼承:單繼承表示只有一個(gè)父類。2.多繼承。3.方法重寫:如果父類方法的功能不能滿足需求,可以在子類中重寫父類的方法。封裝、繼承、多態(tài)(三)多態(tài)多態(tài)也是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特征之一,它的直接作用是讓不同類的同一功能可以通過同一個(gè)接口調(diào)用,并表現(xiàn)出不同的行為,舉例如下。能不能滿足需求,可以在子類中重寫父類的方法。classDog:defshout(self):print("Iamadog")classCat:defshout(self):print("Iamacat")defshout(obj):obj.shout()dog=Dog()cat=Cat()shout(dog)shout(cat)運(yùn)行結(jié)果如下。IamadogIamacat一、程序分析(一)程序過程分析(1)本程序涉及兩個(gè)對(duì)象:玩家和計(jì)算機(jī)。(2)用數(shù)字表示石頭、剪刀、布,規(guī)定1表示石頭、2表示剪刀、3表示布。(3)游戲開始,玩家出拳,輸入1~4的整數(shù),輸入4則退出游戲,輸入除此之外的其他數(shù)字時(shí),要求重新輸入;計(jì)算機(jī)隨機(jī)生成1~3的整數(shù)。一、程序分析(二)程序設(shè)計(jì)基本思路(1)本程序需定義玩家類Player、計(jì)算機(jī)類Computer、游戲類Game。(2)在玩家類Player中定義屬性name和方法fist(),該方法負(fù)責(zé)對(duì)出拳的數(shù)字1、2、3進(jìn)行解釋。(3)計(jì)算機(jī)類和玩家類基本一樣,但是計(jì)算機(jī)出拳是隨機(jī)產(chǎn)生整數(shù)。(4)在游戲類中定義輸出格式、開始方法、創(chuàng)建玩家對(duì)象和計(jì)算機(jī)對(duì)象、調(diào)用玩家和計(jì)算機(jī)類出拳方法、判斷游戲結(jié)果、統(tǒng)計(jì)輸贏次數(shù)、輸出最后輸贏結(jié)果。(5)玩家可以玩多次游戲,輸入4則結(jié)束整個(gè)游戲。二、編寫代碼importrandom#人機(jī)猜拳游戲#定義計(jì)算機(jī)類classComputer:def__init__(self):="計(jì)算機(jī)"self.score=0
#定義計(jì)算機(jī)出拳方式deffist(self,num):ifnum==1:print("\t計(jì)算機(jī)出拳結(jié)果為:【石頭】")elifnum==2:print("\t計(jì)算機(jī)出拳結(jié)果為:【剪刀】")elifnum==3:print("\t計(jì)算機(jī)出拳結(jié)果為:【布】")二、編寫代碼#定義玩家類classPlayer:def__init__(self):="玩家"self.score=0#self.num=num
#定義玩家出拳方式deffist(self,num):ifnum==1:print("\t玩家出拳結(jié)果為:【石頭】")elifnum==2:print("\t玩家出拳結(jié)果為:【剪刀】")elifnum==3:print("\t玩家出拳結(jié)果為:【布】")二、編寫代碼#定義游戲類classGame:nums=0#界面設(shè)計(jì)print("*******************************************************")print("******")print("***歡迎參加人機(jī)猜拳游戲***")print("***
***")print("***游戲規(guī)則:計(jì)算機(jī)隨機(jī)產(chǎn)生1、2、3
***")print("***1:石頭2:剪刀3:布
***")print("***判定規(guī)則為石頭勝剪刀,剪刀勝布,布勝石頭
***")print("*******************************************************")二、編寫代碼print("現(xiàn)在開始游戲")print("請(qǐng)選擇您的出拳方式:1:石頭2:剪刀3:布4:退出游戲")print("-------------------------------------------------")playerfist=int(input("您選擇的出拳方式為:"))#創(chuàng)建玩家對(duì)象并傳入玩家輸入的參數(shù)player=Player()二、編寫代碼#創(chuàng)建計(jì)算機(jī)對(duì)象computer=Computer()whileTrue:player.fist(playerfist)#獲取隨機(jī)數(shù)1、2、3rand_num=random.randint(1,3)#將隨機(jī)數(shù)傳入計(jì)算機(jī)類的fist方法computer.fist(rand_num)
ifplayerfist==1:ifrand_num==1:print("\t本局平局")elifrand_num==2:print("\t本局玩家獲勝")player.score+=1elifrand_num==3:print("\t本局計(jì)算機(jī)獲勝")二、編寫代碼computer.score+=1nums+=1elifplayerfist==2:ifrand_num==1:print("\t本局計(jì)算機(jī)獲勝")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本局計(jì)算機(jī)獲勝")二、編寫代碼computer.score+=1elifrand_num==3:print("\t本局平局")nums+=1elifplayerfist==4:print("\t你選擇4,已經(jīng)退出游戲了")breakelse:print("\t輸入錯(cuò)誤,請(qǐng)重新開始?。?!")print("-------------------------------")
ifplayer.score>computer.score:print(f"\t本輪對(duì)戰(zhàn){nums}次,玩家贏{player.score}次,計(jì)算機(jī)贏{computer.score}次,玩家贏")elifplayer.score<computer.score:print(f"\t本輪對(duì)戰(zhàn){nums}次,玩家贏{player.score}次,計(jì)算機(jī)贏{computer.score}次,計(jì)算機(jī)贏")else:print(f"\t本輪對(duì)戰(zhàn){nums}次,玩家贏{player.score}次,計(jì)算機(jī)贏{computer.score}次,平局")game=Game()三、運(yùn)行結(jié)果**********************************************************
******歡迎參加人機(jī)猜拳游戲
******
******游戲規(guī)則:計(jì)算機(jī)隨機(jī)產(chǎn)生1、2、3
******1:石頭
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年外債借款合同標(biāo)準(zhǔn)范本及信息披露要求3篇
- 2024年擔(dān)保與保證合同新型擔(dān)保方式研發(fā)與應(yīng)用合同3篇
- 2024年新能源產(chǎn)業(yè)質(zhì)押借款合同范本3篇
- 2024年人工智能產(chǎn)業(yè)信托資金借款合同3篇
- 2024年二零二四年度大棚蔬菜種植基地病蟲害生物防治技術(shù)研究合同3篇
- 2024年度農(nóng)產(chǎn)品質(zhì)量安全風(fēng)險(xiǎn)評(píng)估與防控合作協(xié)議3篇
- 2024年農(nóng)業(yè)項(xiàng)目質(zhì)押擔(dān)保及反擔(dān)保合同范本詳解3篇
- 2024年度直播平臺(tái)內(nèi)容版權(quán)許可合同3篇
- 2024年度渣土運(yùn)輸勞務(wù)合同環(huán)保責(zé)任追究范本3篇
- 防性安全教育
- DZ/T 0462.5-2023 礦產(chǎn)資源“三率”指標(biāo)要求 第5部分:金、銀、鈮、鉭、鋰、鋯、鍶、稀土、鍺(正式版)
- (高清版)JTG 3370.1-2018 公路隧道設(shè)計(jì)規(guī)范 第一冊(cè) 土建工程
- 注塑車間工作總結(jié)
- 2024春期國開電大本科《城市管理學(xué)》在線形考(形考任務(wù)1至4)試題及答案
- 綜合英語智慧樹知到期末考試答案2024年
- 教師教學(xué)風(fēng)格對(duì)小學(xué)生學(xué)習(xí)習(xí)慣形成的影響-(畢業(yè)論文)
- 政府機(jī)關(guān)保安服務(wù)項(xiàng)目整體服務(wù)方案
- 藥物分析年終述職報(bào)告
- 餐飲開晨會(huì)班會(huì)講解課件
- 高壓氧工作總結(jié)
- 丙烯精餾塔工藝設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論