作業(yè)012:面向?qū)ο?

1. 建立一個(gè)汽車類Auto亚斋,包括輪胎個(gè)數(shù),汽車顏色拂募,車身重量庭猩,速度等屬性,并通過(guò)不同的構(gòu)造方法創(chuàng)建實(shí)例陈症。至少要求 汽車能夠加速 減速 停車蔼水。 再定義一個(gè)小汽車類CarAuto 繼承Auto 并添加空調(diào)、CD屬性录肯,并且重新實(shí)現(xiàn)方法覆蓋加速趴腋、減速的方法

class Auto:

    def __init__(self, tyre=4, color='白色', weight=2, speed=0):
        self.tyre = tyre
        self.color = color
        self.weight = weight
        self.seppd = speed

    def add_speed(self):
        self.seppd += 2
        if self.seppd >= 180:
            self.seppd = 180

    def sub_seppd(self):
        self.seppd -= 2
        if self.seppd == 0:
            self.seppd = 0

    def stop(self):
        self.seppd = 0


class AirConditioner:
    def __init__(self, breed='空調(diào)', power=1, type='冷暖'):
        self.breed = breed
        self.power = power
        self.type = type


class CD:
    def __init__(self, breed='索尼', color='黑色', price=10000):
        self.breed = breed
        self.color = color
        self.price = price


class CarAuto(Auto):

    def __init__(self, tyre=4, color='白色', weight=2, speed=0):
        super(CarAuto, self).__init__(tyre, color, weight, speed)
        self.air_conditioner = AirConditioner()
        self.CD = CD()

    def add_speed(self):
        self.seppd += 4
        if self.seppd >= 240:
            self.seppd = 240

    def sub_seppd(self):
        self.seppd -= 4
        if self.seppd == 0:
            self.seppd = 0

2. 創(chuàng)建一個(gè)Person類,添加一個(gè)類字段用來(lái)統(tǒng)計(jì)Perosn類的對(duì)象的個(gè)數(shù)

class Person:
    count = 0

    def __init__(self):
        if self.__class__ == Person:    # 判斷類型
            Person.count += 1


class Student(Person):
    pass


stu = Student()
print(Person.count)
cls = Person()
print(Person.count)

3. 創(chuàng)建一個(gè)動(dòng)物類论咏,擁有屬性:性別优炬、年齡、顏色厅贪、類型 蠢护,
?要求打印這個(gè)類的對(duì)象的時(shí)候以'/XXX的對(duì)象: 性別-? 年齡-? 顏色-? 類型-?/' 的形式來(lái)打印

class Animals:
    def __init__(self, type='陸上跑的', color='黑色', age=0, gender='母'):
        self.type = type
        self.color = color
        self.age = age
        self.gender = gender

    def __repr__(self):
        # self.__class__.__name_    打印對(duì)象
        return '/{}的對(duì)象: 性別-{} 年齡-{} 顏色-{} 類型-{}/'.format(self.__class__.__name__, self.gender, self.age, self.color, self.type)


a1 = Animals()
print(a1)

4. 寫一個(gè)圓類, 擁有屬性半徑养涮、面積和周長(zhǎng)葵硕;要求獲取面積和周長(zhǎng)的時(shí)候的時(shí)候可以根據(jù)半徑的值把對(duì)應(yīng)的值取到眉抬。但是給面積和周長(zhǎng)賦值的時(shí)候,程序直接崩潰懈凹,并且提示改屬性不能賦值

class ReadOnlyError(Exception):
    def __str__(self):
        return '該屬性不能賦值'


class Circle:
    pi = 3.1415926

    def __init__(self, radius):
        self.radius = radius
        self._area = 0
        self._perimeter = 0

    @property
    def area(self):
        return Circle.pi * self.radius * self.radius

    @area.setter
    def area(self, value):
        raise ReadOnlyError

    @property
    def perimeter(self):
        return 2 * Circle.pi * self.radius

    @perimeter.setter
    def perimeter(self, value):
        raise ReadOnlyError


c1 = Circle(10)
print(c1.area, c1.perimeter)
# c1.area = 100

5. 寫一個(gè)撲克類吐辙, 要求擁有發(fā)牌和洗牌的功能(具體的屬性和其他功能自己根據(jù)實(shí)際情況發(fā)揮)

# 導(dǎo)入枚舉模塊
import enum
from random import shuffle

class PokerNum(enum.Enum):
    """
    創(chuàng)建枚舉類
    """
    J = (11, 'J')
    Q = (12, 'Q')
    K = (13, 'K')
    A = (14, 'A')
    Two = (15, '2')
    Three = (3, '3')
    Four = (4, '4')
    Five = (5, '5')
    Six = (6, '6')
    Seven = (7, '7')
    Eight = (8, '8')
    Nine = (9, '9')
    Ten = (10, '10')
    Joker_S = (16, 'joker')
    Joker_D = (17, 'JOKER')

# print(PokerNum.J, PokerNum.K.value)
# print(PokerNum.__members__)
# for item in PokerNum.__members__.items():
#     print(item, type(item[1]))

class Poker:
    """
    撲克類
    創(chuàng)建對(duì)象:顏色和張數(shù)
    """
    def __init__(self, color, num):
        self.color = color  # ? ? ? ?
        self.num = num  # 2-10,J,Q,K,A;小王蘸劈,大王

    def __repr__(self):
        return '{}{}'.format(self.color, self.num.value[1])

    # 讓Poker對(duì)象可以比較大小(>):重載魔法方法
    def __gt__(self, other):
        return self.num.value[0] > other.num.value[0]

class PockerGame:
    """
    玩游戲類
    """
    def __init__(self):
        self.pokers = []
        # 創(chuàng)建牌
        nums = PokerNum.__members__.items()
        colors = ['?', '?', '?', '?']
        for num in nums:
            if num[1] == PokerNum.Joker_S or num[1] == PokerNum.Joker_D:
                continue
            for color in colors:
                # if num[1] != PokerNum.Joker_S and num[1] != PokerNum.Joker_D:
                # 創(chuàng)建牌對(duì)象
                p = Poker(color, num[1])
                self.pokers.append(p)
        self.pokers.append(Poker('', PokerNum.Joker_S))
        self.pokers.append(Poker('', PokerNum.Joker_D))
        print(self.pokers)


    def __shuffle(self):
        """
        定義為私有的方法
        洗牌
            方法1:轉(zhuǎn)換為集合
            方法2:random.shuffle(列表)
        :return:
        """
        # print(set(self.pokers))
        shuffle(self.pokers)
        print(self.pokers)

    def deal(self):
        """
        在發(fā)牌之前先調(diào)用洗牌
        :return:
        """
        self.__shuffle()
        poker_iter = iter(self.pokers)
        p1 = []
        p2 = []
        p3 = []
        for _ in range(17):
            p1.append(next(poker_iter))
            p2.append(next(poker_iter))
            p3.append(next(poker_iter))
        # 排序
        # p1.sort(key=lambda item: item.num.value[0], reverse=True)
        # p2.sort(key=lambda item: item.num.value[0], reverse=True)
        # p3.sort(key=lambda item: item.num.value[0], reverse=True)
        p1.sort(reverse=True)
        p2.sort(reverse=True)
        p3.sort(reverse=True)

        return p1,p2,p3,list(poker_iter)

game = PockerGame()
# game.shuffle()
print(game.deal())
# p1 = Poker('?', PokerNum.J)
# p2 = Poker('?', PokerNum.K)
# print(p1<p2)

6. (嘗試)寫一個(gè)類昏苏,其功能是:1.解析指定的歌詞文件的內(nèi)容 2.按時(shí)間顯示歌詞 提示:歌詞文件的內(nèi)容一般是按下面的格式進(jìn)行存儲(chǔ)的。歌詞前面對(duì)應(yīng)的是時(shí)間威沫,在對(duì)應(yīng)的時(shí)間點(diǎn)可以顯示對(duì)應(yīng)的歌詞

class Lyric:
    def __init__(self):
        self._time = 0   # 時(shí)間
        self.word = ''  # 歌詞

    @property
    def time(self):
        return self._time

    @time.setter    # 把時(shí)間轉(zhuǎn)為秒的形式
    def time(self, value):
        fen = float(value[1:3])
        miao = float(value[4:])
        self._time = fen*60 + miao

    def __repr__(self):
        """自定義打印"""
        return '{}:{}'.format(self.time, self.word)

    def __lt__(self, other):
        return self._time > other._time

class LyricAnalysis:

    def __init__(self, song_name: str):
        self.__song_name = song_name  # 歌名(對(duì)象屬性)
        self.__lyrics = []    # 用于存儲(chǔ)歌詞與時(shí)間

    def __analysis_file(self):
        # 讀歌詞文件中的內(nèi)容
        with open('file/'+self.__song_name + '.lrc', 'r', encoding='utf-8') as r_f:
            while True:
                line_content = r_f.readline()
                if not line_content:
                    break
                # 將時(shí)間和歌詞分離
                lines = line_content.split(']')
                # 時(shí)間點(diǎn)和歌詞產(chǎn)生一一對(duì)應(yīng)關(guān)系
                # print(lines)
                # word = lines[-1][:-1] # 讓歌詞一行顯示
                word = lines[-1]
                for time in lines[:-1]:
                    lyric = Lyric()
                    lyric.time = time
                    lyric.word = word
                    self.__lyrics.append(lyric)
        # 對(duì)歌詞進(jìn)行排序(先重寫比較大小的方法)
        self.__lyrics.sort()
        # print(self.__lyrics)

    def get_lyric(self, time):
        """根據(jù)時(shí)間獲取歌詞"""
        if not self.__lyrics:   # 在實(shí)現(xiàn)功能之前先解析歌詞文件(判斷是否已經(jīng)解析過(guò))
            self.__analysis_file()

        # 找到第一個(gè)小于指定時(shí)間的歌詞對(duì)象
        for lyric in self.__lyrics:
            if lyric.time <= time:
                return lyric.word


l1 = LyricAnalysis('藍(lán)蓮花')
print(l1.get_lyric(10))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贤惯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子棒掠,更是在濱河造成了極大的恐慌孵构,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烟很,死亡現(xiàn)場(chǎng)離奇詭異颈墅,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)雾袱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門恤筛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人芹橡,你說(shuō)我怎么就攤上這事毒坛。” “怎么了林说?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵煎殷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我腿箩,道長(zhǎng)豪直,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任珠移,我火速辦了婚禮弓乙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剑梳。我一直安慰自己唆貌,他們只是感情好滑潘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布垢乙。 她就那樣靜靜地躺著,像睡著了一般语卤。 火紅的嫁衣襯著肌膚如雪追逮。 梳的紋絲不亂的頭發(fā)上酪刀,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音钮孵,去河邊找鬼骂倘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛巴席,可吹牛的內(nèi)容都是我干的历涝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼漾唉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼荧库!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起赵刑,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤分衫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后般此,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚪战,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年铐懊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了邀桑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡科乎,死狀恐怖概漱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情喜喂,我是刑警寧澤瓤摧,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站玉吁,受9級(jí)特大地震影響照弥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜进副,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一这揣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧影斑,春花似錦给赞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至皆辽,卻和暖如春柑蛇,著一層夾襖步出監(jiān)牢的瞬間芥挣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工耻台, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留空免,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓盆耽,卻偏偏與公主長(zhǎng)得像蹋砚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摄杂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容