成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

python大佬養(yǎng)成計(jì)劃--面向?qū)ο?

hzc / 1977人閱讀

摘要:的名字并不是規(guī)定死的因?yàn)槭切螀ⅲ部梢允褂?,但是最好還是按照約定是用。類的私有方法兩個(gè)下劃線開頭,聲明該方法為私有方法,只能在類的內(nèi)部調(diào)用,不能在類地外部調(diào)用。。

面向?qū)ο缶幊叹哂腥筇匦裕憾鄳B(tài)、繼承、封裝
定義:是一個(gè)抽象的模板
對(duì)象:類實(shí)例化
屬性:這個(gè)類實(shí)例化后的對(duì)象具有的特征
方法:類對(duì)象可以執(zhí)行的函數(shù)

類的定義
class 類名
class People(object):
    # object代表是, 人類繼承于哪一個(gè)類, 如果不知道繼承哪個(gè)類, 就寫object;

    # 構(gòu)造方法(魔術(shù)方法), 當(dāng)創(chuàng)建對(duì)象的時(shí)候, 自動(dòng)執(zhí)行的函數(shù)
    def __init__(self, name, age, gender):
        # python解釋器自動(dòng)將對(duì)象傳給self這個(gè)形參.
        # 看self到底是什么東西?

        # 將對(duì)象與該對(duì)象的屬性綁定在一起.
        #  調(diào)用對(duì)象的屬性兩種方式:
        #       - Tom.name
        #       - self.name
        self.name = name     # 屬性
        self.age = age       # 屬性
        self.gender = gender # 屬性
        #    print(self)  # 實(shí)質(zhì)上是一個(gè)對(duì)象, <__main__.People object at 0x0000024111324630>
    # 方法(在類里面定義的函數(shù), 叫做方法)
    def eat(self):
        print("%s 正在吃飯..." %(self.name))

# 創(chuàng)建對(duì)象====根據(jù)模板(類)創(chuàng)建對(duì)象(真實(shí)存在)
Tom = People("Tom Smith",  10, "male")

#測(cè)試
# 看對(duì)象的屬性
print(Tom.name)
print(Tom.age)
print(Tom.gender)
# 讓對(duì)象執(zhí)行方法
Tom.eat()

私有屬性和私有方法
1).類的私有屬性:
__private_attrs:兩個(gè)下劃線開頭,聲明該屬性為私有,
不能在類地外部被使用或直接訪問(wèn)。
在類內(nèi)部的方法中使用時(shí) self.__private_attrs。
2).類的方法:
在類的內(nèi)部,使用 def 關(guān)鍵字來(lái)定義一個(gè)方法,與一般函數(shù)定義不同,
類方法必須包含參數(shù) self,且為第一個(gè)參數(shù),self 代表的是類的實(shí)例。
self 的名字并不是規(guī)定死的(因?yàn)槭切螀?,也可以使用 this,但是最好還是按照約定是用 self。
3).類的私有方法
__private_method:兩個(gè)下劃線開頭,聲明該方法為私有方法,只能在類的內(nèi)部調(diào)用 ,
不能在類地外部調(diào)用。self.__private_methods。
class People(object):
    def __init__(self,name,age,gender, money):
        self.name = name
        self.age = age
        self.gender = gender
        self.__money = money
        self.__play()
    def __play(self):
        print("王者榮耀正在進(jìn)行時(shí)......")

p1 = People("user1", 10, "male", 1000000)
print(p1.gender)

p1.__play()#報(bào)錯(cuò),AttributeError: "People" object has no attribute "__play"

棧數(shù)據(jù)結(jié)構(gòu)
棧的方法有入棧(push), 出棧(pop), 棧頂元素(top),棧的長(zhǎng)度(lenght), 判斷棧是否為空(isempty),顯示棧元素(view)
操作結(jié)果:
棧類的實(shí)例化
入棧2次
出棧1次
顯示最終棧元素
class Stack(object):
    def __init__(self):
        self.stack_list =[]
    def push(self,val):
        self.stack_list.append(val)
        return True
    def pop(self):
        self.stack_list.pop()
        return True
    def top(self):
        return self.stack_list[-1]
    def lenght(self):
        return len(self.stack_list)
    def isempty(self):
        return self.stack_list ==[]
    def view(self):
        return ",".join(self.stack_list)

stack1 = Stack()
stack1.push("3")
stack1.push("4")
print(stack1.view())
stack1.pop()
print(stack1.view())

第二特性之繼承

概念:

父類與子類/基類和派生類

class Anminal(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def eat(self):
        print("i"m hungry,i want to eat something~~~")

class Dog(Anminal):
    def __init__(self,name,age,power):
        #當(dāng)子類沒(méi)有的屬性和方法,會(huì)到父類里面找。如果父類有沒(méi)有,就會(huì)報(bào)錯(cuò)
        #父類的私有屬性和私有方法,子類不能查看與操作
        super(Dog, self).__init__(name,age)
        self.power =power
    def eat(self):
        super(Dog, self).eat()
        print("wang~~")

H = Dog("大黃",6,100)
print(H.power)
print(H.name)
print(H.age)
H.eat()

多繼承
# 經(jīng)典類
class Person1:
    pass
p1 = Person1()
print(p1)

# 新式類
class Person2(object):
    pass
p2 = Person2()
print(p2)

在python2中既有新式類也有經(jīng)典類;

  經(jīng)典類的繼承算法: 深度優(yōu)先算法
  新式類的繼承算法: 廣度優(yōu)先算法,同級(jí)優(yōu)先

python3全部都是新式類;

    def test(self):
        print("D test")
class C(D):
    pass
    def test(self):
        print("C test")
class B(D):
    pass
    #def test(self):
     #   print("B test")
class A(B,C):
    pass
    # def test(self):
    #     print("A test")
a = A()
a.test()

烏龜吃魚
游戲編程:按以下要求定義一個(gè)烏龜類和魚類并嘗試編寫游戲
假設(shè)游戲場(chǎng)景為范圍(x,y)為0<=x<=10,0<=y<=10
游戲生成1只烏龜和10條魚
它們的移動(dòng)方向均隨機(jī)
烏龜?shù)淖畲笠苿?dòng)能力為2(它可以隨機(jī)選擇1還是2移動(dòng)),魚兒的最大移動(dòng)能力是1
當(dāng)移動(dòng)到場(chǎng)景邊緣,自動(dòng)向反方向移動(dòng)
烏龜初始化體力為100(上限)
烏龜每移動(dòng)一次,體力消耗1
當(dāng)烏龜和魚坐標(biāo)重疊,烏龜吃掉魚,烏龜體力增加20
魚暫不計(jì)算體力
當(dāng)烏龜體力值為0(掛掉)或者魚兒的數(shù)量為0游戲結(jié)束
import random


class Animals(object):
    def __init__(self):
        # 隨機(jī)生成動(dòng)物的坐標(biāo)
        self.x = random.randint(0, 10)
        self.y = random.randint(0, 10)

    def move(self, move_skill):
        # 計(jì)算出烏龜新的坐標(biāo); (10,0)  (12,0)
        new_x = self.x + random.choice(move_skill)  # 12
        new_y = self.y + random.choice(move_skill)  # 0
        # 更新烏龜?shù)淖鴺?biāo)值
        self.x = self.is_vaild(new_x)
        self.y = self.is_vaild(new_y)

    def is_vaild(self, value):  # 12
        """判斷坐標(biāo)值是否合法(0~10之間), 返回合法的值"""
        if value < 0:  # eg: -2 ==   abs(-2) ==> 2
            return abs(value)
        elif value > 10:  # eg: 12 ====>   10-(12-10)  ==> 8
            return 10 - (value - 10)
        return value


class Trutle(Animals):
    # 構(gòu)造函數(shù)何時(shí)執(zhí)行? 類實(shí)例化對(duì)象(創(chuàng)建對(duì)象)時(shí), 自動(dòng)調(diào)用該函數(shù)內(nèi)容
    def __init__(self):
        super(Trutle, self).__init__()
        # 烏龜初始化體力為100(上限)
        self.power = 100
    def move(self, move_skill = [-2, -1, 0, 1, 2]):
        super(Trutle, self).move(move_skill)
        # 烏龜每移動(dòng)一次,體力消耗1
        self.power -= 1

    def eat(self):
        # 當(dāng)烏龜和魚坐標(biāo)重疊,烏龜吃掉魚,烏龜體力增加20
        if self.power>80:
            self.power =100
        else:
            self.power +=20

class Fish(Animals):
    def move(self, move_skill = (-1, 0, 1 )):
        # 魚的最大移動(dòng)能力為1
        super(Fish, self).move(move_skill)

def start_game():
    # 創(chuàng)建一個(gè)烏龜
    t1 = Trutle()
    # 創(chuàng)建10個(gè)魚
    # fishs = []
    # for i in range(10):
    #     fishs.append(Fish())
    fishs = [Fish() for i in range(10)]
    # 游戲開始運(yùn)行
    while True:
        # 判斷游戲是否結(jié)束(烏龜沒(méi)體力或者魚被吃光了)
        if t1.power <= 0:
            print("烏龜沒(méi)體力了, Game over.........")
            break
        elif len(fishs) == 0:
            print("魚被吃光了, Game over......... ")
            break
        else:
            # 烏龜和魚隨機(jī)移動(dòng)
            t1.move()
            for index, fish in enumerate(fishs):
                fish.move()
                # 判斷烏龜是否吃到了魚?
                if t1.x == fish.x and t1.y == fish.y:
                    t1.eat()
                    fishs.remove(fish)
                    print("魚被吃掉, 還剩%d條魚......." %(len(fishs)))
                    print("烏龜最新體能為%s" %(t1.power))
            # 當(dāng)烏龜?shù)淖鴺?biāo)與每一條魚進(jìn)行比較, 都沒(méi)有重合, 也就是沒(méi)有遲到一條魚;
            else:
                print("烏龜沒(méi)有吃到魚, 最新體能為%s" %(t1.power))
# 如果這個(gè)腳本(模塊), 沒(méi)有被調(diào)用, 則執(zhí)行下面的代碼
if __name__ == "__main__":
    print("游戲開始".center(50, "*"))
    start_game()

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/42366.html

相關(guān)文章

  • python大佬養(yǎng)成計(jì)劃----socket實(shí)現(xiàn)UDP通信

    摘要:是建立可靠連接,并且通信雙方都可以以流的形式發(fā)送數(shù)據(jù)。相對(duì),則是面向無(wú)連接的協(xié)議。測(cè)試結(jié)果用兩個(gè)命令行分別啟動(dòng)服務(wù)器和客戶端測(cè)試開啟服務(wù)端完成一次通信 UDP TCP是建立可靠連接, 并且通信雙方都可以以流的形式發(fā)送數(shù)據(jù)。 相對(duì)TCP, UDP則是面向無(wú)連接的協(xié)議。使用UDP協(xié)議時(shí), 不需要建立連接, 只需要知道對(duì)方的IP地址和端口號(hào), 就可以直接發(fā)數(shù)據(jù)包。 但是, 能不能到達(dá)就不知道...

    Juven 評(píng)論0 收藏0
  • python大佬養(yǎng)成計(jì)劃----socket實(shí)現(xiàn)TCP通信

    摘要:我們來(lái)編寫一個(gè)簡(jiǎn)單的服務(wù)器程序,它接收客戶端連接,回復(fù)客戶端發(fā)來(lái)的請(qǐng)求。如果一切順利,新浪的服務(wù)器接受了我們的連接,一個(gè)連接就建立起來(lái)的,后面的通信就是發(fā)送網(wǎng)頁(yè)內(nèi)容了。 TCP TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC 793定義。在簡(jiǎn)化的計(jì)算機(jī)網(wǎng)絡(luò)OSI模型中,它完成第四...

    layman 評(píng)論0 收藏0
  • python大佬養(yǎng)成計(jì)劃----flask_sqlalchemy操作數(shù)據(jù)庫(kù)

    摘要:使用對(duì)象關(guān)系映射框架,它將低層的數(shù)據(jù)庫(kù)操作指令抽象成高層的面向?qū)ο蟛僮?。在中,?shù)據(jù)庫(kù)使用指定。安裝對(duì)數(shù)據(jù)庫(kù)操作如何創(chuàng)建數(shù)據(jù)庫(kù)操作連接為了創(chuàng)建初始數(shù)據(jù)庫(kù),調(diào)用方法來(lái)創(chuàng)建表和數(shù)據(jù)庫(kù)您的數(shù)據(jù)庫(kù)已經(jīng)生成。最為常見的關(guān)系就是一對(duì)多的關(guān)系。 flask_sqlalchemy 使用對(duì)象關(guān)系映射(Object-Relational Mapper, ORM)框架,它將低層的數(shù)據(jù)庫(kù)操作指令抽象成高層的面向...

    RdouTyping 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<