關于面向對象的練習

主要包括:

  • 奧特曼大戰小怪獸
  • 面向對象方法重構登錄系統

感覺自己還是不是很適應面向對象呀,還是應該多做這方面的練習,寫了一個奧特曼大戰(欺負)小怪獸的小練習:(給奧特曼加了一個大招buffer )充錢玩家,充錢玩家,,,怪獸基本上活不過三輪,,,
主要是使用到了類的繼承

# @Time   : 2019/5/25 17:13
# @Author : Vector_Wan
# @Email  : 995626309@qq.com
# File    : 奧特曼大戰小怪獸.py
# Software: PyCharm
import random as rn

class Sprit(object):

    def __init__(self, name):
        self.blood = 100
        self.power = 12
        self.name = name


    def atteck(self, monster):
        minus = rn.randrange(self.power - 5, self.power + 5)
        if monster.is_living():
            monster.blood  = monster.minus_blood(minus)
        print(monster.name+':\t'+str(monster.blood))

    def is_living(self):
        if self.blood > 0:
            return  True
        else:
            return False

    def minus_blood(self, num):
        return self.blood - num

class Hero(Sprit):

    def bug_atteck(self, monster):
        monster.blood = monster.minus_blood(monster.blood)

    def atteck(self, monster):
        super().atteck(monster)
        if rn.randint(0,3) == 1:
            print(self.name + "使用了道具")
            self.bug_atteck(monster)

class Monster(Sprit):
    pass

if __name__ == '__main__':
    h = Hero("奧特曼")
    m = Monster("哥斯拉")
    while m.is_living() and h.is_living():
        m.atteck(h)
        h.atteck(m)

    if m.is_living():
        print(m.name + "獲得勝利")
    if h.is_living():
        print(h.name + "獲得勝利")

第二部分主要是使用面向對象方法重構了一下用戶登錄系統:不解釋了,就是想把代碼保存到云端,,,不過里面還是有一些python語法糖和小技巧的~~

目標:實現用戶登錄、注冊、查詢等功能。

# @Time   : 2019/5/30 15:09
# @Author : Vector_Wan
# @Email  : 995626309@qq.com
# File    : 使用面向對象方法重構登錄系統.py
# Software: PyCharm
class User(object):

    def __init__(self, name = 'default', pass_word = 'default'):

        self.__name = name
        self.__pass_word = pass_word

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self, name):
        if len(name) > 0 and len(name) < 10:
            self.__name = name
        else:
            self.__pass_word = 'default'


    @property
    def pass_word(self):
        return self.__pass_word

    @pass_word.setter
    def pass_word(self, pass_word):
        if len(pass_word) > 0 and len(pass_word) < 10:
            self.__pass_word = pass_word
        else:
            self.__pass_word = 'default'



class Account(object):

    def __init__(self):
        # 用戶列表,數據格式:[user對象,user對象,user對象]
        self.uers_list = []

    def log_in(self):
        '''
        登錄程序,輸入用戶名和密碼然后去self.user_list中校驗用戶合法性
        :return:
        '''
        while True:
            print('***** 用戶登錄 *****\n')
            name = input('請輸入用戶名:\n')
            pwd = input('請輸入密碼:\n')
            user = self.name_in_list(name)
            if user == None:
                print('用戶名不存在!\n是否注冊一個用戶? Y/N?')
                if input().upper() == 'Y':
                    self.register()

            if user.pass_word != pwd:
                print(user.pass_word)
                print(pwd)
                print('用戶名或密碼錯誤!\n')
                continue
            break

        print('登錄成功!歡迎  ', name, '\n')
        while True:
            dic = {'1': self.log_out, '2': self.read_data}
            print('''
***** 用戶菜單 *****
1.注銷用戶
2.查看信息''')
            a = input('請選擇(1 / 2):')
            if dic.get(a) == None:
                print('輸入有誤!請重新輸入!')
                continue
            dic.get(a)(name)

    def name_in_list(self, name):
        '''
        用于判斷用戶名是否在用戶列表中,
        :return: 如果存在返回這個對象,否則什么都不返回(None)
        '''
        for i in range(len(self.uers_list)):
            if name == self.uers_list[i].name:
                return self.uers_list[i]
        return None

    def name_is_ok(self, strs):
        '''
        本函數用于判斷用戶輸入的用戶名或密碼是否合法
        :param strs: 用戶名或密碼(字符串)
        :return: 合法:True 不合法: False
        '''
        if len(strs) > 0 and len(strs) < 10:
            return True
        return False

    def register(self):
        '''
        注冊函數
        :return:
        '''
        while True:
            print('***** 用戶注冊 *****\n')
            name = input('請輸入用戶名:\n')
            if not (self.name_is_ok(name)):
                print('用戶名不合法請輸入 0 ~ 10位字符\n')
                continue
            if not(self.name_in_list(name) == None):
                print('該用戶名已存在請重新輸入:\n')
                continue
            pwd = input('請輸入密碼:\n')
            if not (self.name_is_ok(pwd)):
                print('密碼不合法請輸入 0 ~ 10位字符\n')
                continue
            break
        user = User(name, pwd)
        self.uers_list += [user]
        print('注冊成功!')
        while True:
            dic = {'1': self.log_out, '2': self.read_data}
            print('''
***** 用戶菜單 *****
1.注銷用戶
2.查看信息''')
            a = input('請選擇(1 / 2):')
            if dic.get(a) == None:
                print('輸入有誤!請重新輸入!')
                continue
            dic.get(a)(name)

    def log_out(self, name):
        '''
        下線函數
        :return:
        '''
        print('您已成功注銷,再見!  ', name)
        self.run()

    def read_data(self, name):
        '''
        查看用戶信息函數
        :return:
        '''
        user = self.name_in_list(name)
        print('\n***********')
        print('當前用戶信息:')
        print('您的用戶名為:', user.name)
        print('您的密碼為:', user.pass_word)

    def run(self):
        """
        主程序
        :return:
        """
        while True:
            dic = {'1': self.register, '2': self.log_in}
            print('''
***** 主菜單 *****
1.注冊
2.登陸''')
            a = input('請選擇(N/n退出):')
            if a.upper() == 'N':
                return
            if dic.get(a) == None:
                print('輸入有誤!請重新輸入!')
                continue
            dic.get(a)()


if __name__ == '__main__':
    obj = Account()
    obj.run()

over 應該還是有可以簡化的地方的

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,125評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,506評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,402評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,934評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,168評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,690評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,596評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,027評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,398評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,743評論 2 370