美文网首页
关于面向对象的练习

关于面向对象的练习

作者: Vector_Wan | 来源:发表于2019-05-31 21:37 被阅读0次

    主要包括:

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

    感觉自己还是不是很适应面向对象呀,还是应该多做这方面的练习,写了一个奥特曼大战(欺负)小怪兽的小练习:(给奥特曼加了一个大招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 应该还是有可以简化的地方的

    相关文章

      网友评论

          本文标题:关于面向对象的练习

          本文链接:https://www.haomeiwen.com/subject/zykntctx.html