关于面向对象的练习

2019-05-31  本文已影响0人  Vector_Wan

主要包括:

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

上一篇下一篇

猜你喜欢

热点阅读