貓哥教你寫爬蟲 021--類與對象(上)-做業

小練習

爲類calendar添加兩個方法:一個刪除完成項,一個添加新增項。
因爲日程安排是事情和時間的配對,因此咱們用字典來存放:
{'給父母買禮物':'9:00', '學習':'10:00', '和朋友聚會':'18:30'}
接下來,須要你新建兩個類方法,從而實現字典中的數據增減。
複製代碼

須要的效果:

1558680284745

class calendar:
    # 日程表的日期
    date = '2020-08-08'
    # 事件清單,以字典形式給出,鍵爲事件,值是安排的時間
    things = {'給父母買禮物':'9:00', '學習':'10:00', '和朋友聚會':'18:30'}
 @classmethod
    def thing_done(cls, thing):
        del cls.things[thing]
        print(cls.things)
 @classmethod
    def add_thing(cls, thing, time):
        cls.things[thing] = time
        print(cls.things)
while True:
    print(calendar.things)
    calendar.thing_done(input('請輸入完成的事項: '))
    thing = input('請輸入備忘的事件: ')
    time = input('請輸入須要完成的時間: ')
    calendar.add_thing(thing,time)
    if input('是否繼續添加, 回覆"是"繼續, 回覆其餘退出...') != "是":
        break
複製代碼

嘗試使用面向對象改寫代碼...

import time
import random
user1 = {
    'name': '',
    'life': 0,
    'victory':0
}
user2 = {
    'name': '',
    'life': 0,
    'victory':0
}
attack_list = [
    {
        'desc':'{} 揮劍向 {} 砍去',
        'num':20
    },
    {
        'desc':'{} 準備剛正面, 對 {} 使出一記"如來神掌"',
        'num':30
    },
    {
        'desc':'{} 擼起了袖子給 {} 一頓胖揍',
        'num':25
    },
    {
        'desc':'{} 向 {} 拋了個媚眼',
        'num':10
    },
    {
        'desc':'{} 抄起衝鋒槍就是一梭子, {} 走位風騷, 輕鬆躲過',
        'num':0
    },
    {
        'desc':'{} 出了一個大招, {} 躲閃不及, 正中要害',
        'num':40
    }
]
user1['name'] = input('請輸入玩家1的暱稱: ')
user2['name'] = input('請輸入玩家2的暱稱: ')
while True:
    user1['victory'] = 0
    user2['victory'] = 0
    for i in range(3):
        print(' \n——————如今是第 {} 局——————'.format(i+1))
        user1['life'] = random.randint(100, 150)
        user2['life'] = random.randint(100, 150)
        print(user1['name']+'\n血量:{}'.format(user1['life']))
        print('------------------------')
        print(user2['name']+'\n血量:{}'.format(user2['life']))
        print('-----------------------')
        time.sleep(4)
        first_attack = random.randint(0,1)
        users_list = []
        if first_attack:
            user1['isfirst'] = 1
            print('漂亮!!! '+user1['name']+' 得到先發優點!')
            print('')
            users_list.append(user1)
            users_list.append(user2)
        else:
            user2['isfirst'] = 1
            print('難以置信! '+user2['name']+' 得到先發優點!')
            print('')
            users_list.append(user2)
            users_list.append(user1)
        time.sleep(2)
        while user1['life'] > 0 and user2['life'] > 0:
            tmp_rand = random.randint(0,len(attack_list)-1)
            users_list[1]['life'] = users_list[1]['life'] - attack_list[tmp_rand]['num']
            print(attack_list[tmp_rand]['desc'].format(users_list[0]['name'],users_list[1]['name'])+' 形成了{}點傷害 ==> '.format(attack_list[tmp_rand]['num'])+users_list[1]['name']+' 的剩餘血量:{}'.format(users_list[1]['life']))
            time.sleep(4)
            if users_list[1]['life'] <= 0:
                print('')
                print(users_list[1]['name']+' 慘敗 -_-||')
                users_list[0]['victory']+=1
                break
            tmp_rand = random.randint(0,len(attack_list)-1)
            users_list[0]['life'] = users_list[0]['life'] - attack_list[tmp_rand]['num']
            print(attack_list[tmp_rand]['desc'].format(users_list[1]['name'],users_list[0]['name'])+' 形成了{}點傷害 ==> '.format(attack_list[tmp_rand]['num'])+users_list[0]['name']+' 的剩餘血量:{}'.format(users_list[0]['life']))
            time.sleep(4)
            if users_list[0]['life'] <= 0:
                print('')
                print(users_list[0]['name']+' 慘敗 -_-||')
                time.sleep(3)
                users_list[1]['victory']+=1
                break
            print('-----------------------')
        if user1['victory'] == 2:
            print('')
            print('三局兩勝中 '+user1['name']+' 獲勝!')
            break
        if user2['victory'] == 2:
            print('')
            print('三局兩勝中 '+user2['name']+' 獲勝!')
            break
    print('')
    res = input('要不要再來一局? (回覆"是"再來一局, 其餘退出...) ') 
    if res != '是':
        break
複製代碼

面向對象的寫法...

import time
import random
class Player1():
    name = ''
    life = 0
    victory = 0
    skills = [
        {
            'desc': '{} 揮劍向 {} 砍去',
            'num': 20
        },
        {
            'desc': '{} 準備剛正面, 對 {} 使出一記"如來神掌"',
            'num': 30
        },
        {
            'desc': '{} 擼起了袖子給 {} 一頓胖揍',
            'num': 25
        },
        {
            'desc': '{} 向 {} 拋了個媚眼',
            'num': 10
        },
        {
            'desc': '{} 抄起衝鋒槍就是一梭子, {} 走位風騷, 輕鬆躲過',
            'num': 0
        },
        {
            'desc': '{} 出了一個大招, {} 躲閃不及, 正中要害',
            'num': 40
        }
    ]
    is_first = False
 @classmethod
    def make_player(cls,name):
        cls.name = name
        cls.life = random.randint(100,150)
        Fight.pprint(cls.name+'\n血量:{}'.format(cls.life))
 @classmethod
    def get_first_attack(cls):
        if random.randint(0, 1):
            cls.is_first = True
            Fight.pprint('漂亮!!! {} 得到先發優點!'.format(cls.name))
 @classmethod
    def fight(cls,cls2):
        skills_index = random.randint(0,len(cls.skills)-1)
        cls2.life = cls2.life - cls.skills[skills_index]['num'] 
        Fight.pprint(cls.skills[skills_index]['desc'].format(cls.name,cls2.name)+ ' 形成了{}點傷害 ==> '.format(cls.skills[skills_index]['num'])+' {}的剩餘血量:{}'.format(cls2.name,cls2.life))
class Player2():
    name = ''
    life = 0
    victory = 0
    skills = [
        {
            'desc': '{} 揮劍向 {} 砍去',
            'num': 20
        },
        {
            'desc': '{} 準備剛正面, 對 {} 使出一記"如來神掌"',
            'num': 30
        },
        {
            'desc': '{} 擼起了袖子給 {} 一頓胖揍',
            'num': 25
        },
        {
            'desc': '{} 向 {} 拋了個媚眼',
            'num': 10
        },
        {
            'desc': '{} 抄起衝鋒槍就是一梭子, {} 走位風騷, 輕鬆躲過',
            'num': 0
        },
        {
            'desc': '{} 出了一個大招, {} 躲閃不及, 正中要害',
            'num': 40
        }
    ]
    is_first = False
 @classmethod
    def make_player(cls,name):
        cls.name = name
        cls.life = random.randint(100,150)
        Fight.pprint(cls.name+'\n血量:{}'.format(cls.life))
 @classmethod
    def get_first_attack(cls):
        if random.randint(0, 1):
            cls.is_first = True
            Fight.pprint('漂亮!!! {} 得到先發優點!'.format(cls.name))
 @classmethod
    def fight(cls,cls2):
        skills_index = random.randint(0,len(cls.skills)-1)
        cls2.life = cls2.life - cls.skills[skills_index]['num'] 
        Fight.pprint(cls.skills[skills_index]['desc'].format(cls.name,cls2.name)+ ' 形成了{}點傷害 ==> '.format(cls.skills[skills_index]['num'])+' {}的剩餘血量:{}'.format(cls2.name,cls2.life))
class Fight():
    def pprint(str1):
        print(str1)
        print('-----------------')
        time.sleep(3)
    def start_fight(name1,name2):
        Player1.victory = 0
        Player2.victory = 0
        while True:
            for i in range(3):
                Fight.pprint('如今是第{}局!'.format(i+1))
                # 生成玩家
                Player1.make_player(name1)
                Player2.make_player(name2)
                # 決定首發
                Player1.get_first_attack()
                if Player1.is_first:
                    while True:
                        Player1.fight(Player2)
                        if Player2.life <= 0:
                            Fight.pprint(Player2.name + ' 慘敗 -_-||')
                            Player1.victory += 1
                            break
                        Player2.fight(Player1)
                        if Player1.life <= 0:
                            Fight.pprint(Player1.name + ' 慘敗 -_-||')
                            Player2.victory += 1
                            break
                else:
                    while True:
                        Player2.fight(Player1)
                        if Player1.life <= 0:
                            Fight.pprint(Player1.name + ' 慘敗 -_-||')
                            Player2.victory += 1
                            break
                        Player1.fight(Player2)
                        if Player2.life <= 0:
                            Fight.pprint(Player2.name + ' 慘敗 -_-||')
                            Player1.victory += 1
                            break
                if Player1.victory == 2 or Player2.victory ==2 :
                    if Player1.victory == 2:
                        Fight.pprint("{} 在三局兩勝中獲勝!!!".format(Player1.name))
                        break
                    else:
                        Fight.pprint("{} 在三局兩勝中獲勝!!!".format(Player2.name))
                        break
            if input('是否繼續? 回覆"是"繼續, 其餘退出... ') != "是":
                break
Fight.start_fight(input('請輸入第一個玩家的名字: '),input('請輸入第一個玩家的名字: '))
複製代碼

快速跳轉:

貓哥教你寫爬蟲 000--開篇.md
貓哥教你寫爬蟲 001--print()函數和變量.md
貓哥教你寫爬蟲 002--做業-打印皮卡丘.md
貓哥教你寫爬蟲 003--數據類型轉換.md
貓哥教你寫爬蟲 004--數據類型轉換-小練習.md
貓哥教你寫爬蟲 005--數據類型轉換-小做業.md
貓哥教你寫爬蟲 006--條件判斷和條件嵌套.md
貓哥教你寫爬蟲 007--條件判斷和條件嵌套-小做業.md
貓哥教你寫爬蟲 008--input()函數.md
貓哥教你寫爬蟲 009--input()函數-人工智能小愛同窗.md
貓哥教你寫爬蟲 010--列表,字典,循環.md
貓哥教你寫爬蟲 011--列表,字典,循環-小做業.md
貓哥教你寫爬蟲 012--布爾值和四種語句.md
貓哥教你寫爬蟲 013--布爾值和四種語句-小做業.md
貓哥教你寫爬蟲 014--pk小遊戲.md
貓哥教你寫爬蟲 015--pk小遊戲(全新改版).md
貓哥教你寫爬蟲 016--函數.md
貓哥教你寫爬蟲 017--函數-小做業.md
貓哥教你寫爬蟲 018--debug.md
貓哥教你寫爬蟲 019--debug-做業.md
貓哥教你寫爬蟲 020--類與對象(上).md
貓哥教你寫爬蟲 021--類與對象(上)-做業.md
貓哥教你寫爬蟲 022--類與對象(下).md
貓哥教你寫爬蟲 023--類與對象(下)-做業.md
貓哥教你寫爬蟲 024--編碼&&解碼.md
貓哥教你寫爬蟲 025--編碼&&解碼-小做業.md
貓哥教你寫爬蟲 026--模塊.md
貓哥教你寫爬蟲 027--模塊介紹.md
貓哥教你寫爬蟲 028--模塊介紹-小做業-廣告牌.md
貓哥教你寫爬蟲 029--爬蟲初探-requests.md
貓哥教你寫爬蟲 030--爬蟲初探-requests-做業.md
貓哥教你寫爬蟲 031--爬蟲基礎-html.md
貓哥教你寫爬蟲 032--爬蟲初體驗-BeautifulSoup.md
貓哥教你寫爬蟲 033--爬蟲初體驗-BeautifulSoup-做業.md
貓哥教你寫爬蟲 034--爬蟲-BeautifulSoup實踐.md
貓哥教你寫爬蟲 035--爬蟲-BeautifulSoup實踐-做業-電影top250.md
貓哥教你寫爬蟲 036--爬蟲-BeautifulSoup實踐-做業-電影top250-做業解析.md
貓哥教你寫爬蟲 037--爬蟲-寶寶要聽歌.md
貓哥教你寫爬蟲 038--帶參數請求.md
貓哥教你寫爬蟲 039--存儲數據.md
貓哥教你寫爬蟲 040--存儲數據-做業.md
貓哥教你寫爬蟲 041--模擬登陸-cookie.md
貓哥教你寫爬蟲 042--session的用法.md
貓哥教你寫爬蟲 043--模擬瀏覽器.md
貓哥教你寫爬蟲 044--模擬瀏覽器-做業.md
貓哥教你寫爬蟲 045--協程.md
貓哥教你寫爬蟲 046--協程-實踐-吃什麼不會胖.md
貓哥教你寫爬蟲 047--scrapy框架.md
貓哥教你寫爬蟲 048--爬蟲和反爬蟲.md
貓哥教你寫爬蟲 049--完結撒花.mdhtml

相關文章
相關標籤/搜索