关于面向对象的练习

主要包括:

  • 奥特曼大战小怪兽
  • 面向对象方法重构登录系统

感觉自己还是不是很适应面向对象呀,还是应该多做这方面的练习,写了一个奥特曼大战(欺负)小怪兽的小练习:(给奥特曼加了一个大招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阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335