学习Python的第四天

python每日总结 专栏收录该内容
5 篇文章 0 订阅

与Python相处的第四天
前言:今天天气死热 万里有几多云 在某站看到几段话在这里先说一下吧
光啊 飘洒吧! -by光之偶像·荷鲁斯
以我之正义歼灭所有 -by光之偶像·荷鲁斯
我怎能 在这里倒下 呃啊~~~ -by全能之玛特咖
语言 最终 无法改变吗! -by制造者卢克
好了好了 中二到此结束 进入正题
对象
前言:没有对象怎么办?NEW个新对象啊!
类和对象:简单的说,类是对象的蓝图和模板,而对象是类的实例。最后一句话画重点。
类的定义:
格式:class 类名(object):(object可写可不写)
def __init(self):
pass
def 函数名():
pass
if name ==‘main’:
函数名()
self:self是个标记 就像国家有国徽一样能一眼看出是哪个对象里面的。
在这里插入图片描述
if:下面的if中的()相当于初始化
类的调用:类名.方法名()在这里插入图片描述
私有变量
私有变量一般用两个下划线+名字来定义
私有变量定义之后不可以在外部调用在这里插入图片描述
调用私有变量:如果硬是要调用私有变量可以查看私有变量的 名字到底定义为什么之后才可以调用或者用下面的另一种方法。
装饰器
访问器:访问器 顾名思义就是访问私有变量的一个东西 @property 然后下面加访问器的函数名字 这样就可以在外部调用私有变量了在这里插入图片描述
经过访问器调用过的私有变狼就会变成一种属性。
_slots_魔法

python是一种动态语言郧西在程运行时给对象绑定新的方法或是属性,也可以对已经绑定的进行解绑或者是修改。
继承
就像 爹有的东西儿子一定有 儿子有的东西爹不一定有一样,子类可以调用父类中的方法,这就是继承
注意:在继承中 子类一定要注意是否初始化了父类中的元素 必须要初始化 必须要初始化 必须要初始化 重要的事情说三遍。
在这里插入图片描述
当然在继承中上面的私有变量对于继承也同样适用。但是要记住 尽量不要去用私有变量 将不准在外面想用这个私有变量了呢 可以用一个约定俗成的格式 (_元素 )这样就可以告诉其他人这个很重要 可以调用 可以修改 但是最好不要碰 好奇心会害死猫。
案例1:奥特曼打小怪兽

from abc import ABCMeta, abstractmethod
from random import randint, randrange


class Fighter(object, metaclass=ABCMeta):
    """战斗者"""

    # 通过__slots__魔法限定对象可以绑定的成员变量
    __slots__ = ('_name', '_hp')

    def __init__(self, name, hp):
        """初始化方法

        :param name: 名字
        :param hp: 生命值
        """
        self._name = name
        self._hp = hp

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

    @property
    def hp(self):
        return self._hp

    @hp.setter
    def hp(self, hp):
        self._hp = hp if hp >= 0 else 0

    @property
    def alive(self):
        return self._hp > 0

    @abstractmethod
    def attack(self, other):
        """攻击

        :param other: 被攻击的对象
        """
        pass


class Ultraman(Fighter):
    """奥特曼"""

    __slots__ = ('_name', '_hp', '_mp')

    def __init__(self, name, hp, mp):
        """初始化方法

        :param name: 名字
        :param hp: 生命值
        :param mp: 魔法值
        """
        super().__init__(name, hp)
        self._mp = mp

    def attack(self, other):
        other.hp -= randint(15, 25)

    def huge_attack(self, other):
        """究极必杀技(打掉对方至少50点或四分之三的血)

        :param other: 被攻击的对象

        :return: 使用成功返回True否则返回False
        """
        if self._mp >= 50:
            self._mp -= 50
            injury = other.hp * 3 // 4
            injury = injury if injury >= 50 else 50
            other.hp -= injury
            return True
        else:
            self.attack(other)
            return False

    def magic_attack(self, others):
        """魔法攻击

        :param others: 被攻击的群体

        :return: 使用魔法成功返回True否则返回False
        """
        if self._mp >= 20:
            self._mp -= 20
            for temp in others:
                if temp.alive:
                    temp.hp -= randint(10, 15)
            return True
        else:
            return False

    def resume(self):
        """恢复魔法值"""
        incr_point = randint(1, 10)
        self._mp += incr_point
        return incr_point

    def __str__(self):
        return '~~~%s奥特曼~~~\n' % self._name + \
            '生命值: %d\n' % self._hp + \
            '魔法值: %d\n' % self._mp


class Monster(Fighter):
    """小怪兽"""

    __slots__ = ('_name', '_hp')

    def attack(self, other):
        other.hp -= randint(10, 20)

    def __str__(self):
        return '~~~%s小怪兽~~~\n' % self._name + \
            '生命值: %d\n' % self._hp


def is_any_alive(monsters):
    """判断有没有小怪兽是活着的"""
    for monster in monsters:
        if monster.alive > 0:
            return True
    return False


def select_alive_one(monsters):
    """选中一只活着的小怪兽"""
    monsters_len = len(monsters)
    while True:
        index = randrange(monsters_len)
        monster = monsters[index]
        if monster.alive > 0:
            return monster


def display_info(ultraman, monsters):
    """显示奥特曼和小怪兽的信息"""
    print(ultraman)
    for monster in monsters:
        print(monster, end='')


def main():
    u = Ultraman('骆昊', 1000, 120)
    m1 = Monster('狄仁杰', 250)
    m2 = Monster('白元芳', 500)
    m3 = Monster('王大锤', 750)
    ms = [m1, m2, m3]
    fight_round = 1
    while u.alive and is_any_alive(ms):
        print('========第%02d回合========' % fight_round)
        m = select_alive_one(ms)  # 选中一只小怪兽
        skill = randint(1, 10)   # 通过随机数选择使用哪种技能
        if skill <= 6:  # 60%的概率使用普通攻击
            print('%s使用普通攻击打了%s.' % (u.name, m.name))
            u.attack(m)
            print('%s的魔法值恢复了%d点.' % (u.name, u.resume()))
        elif skill <= 9:  # 30%的概率使用魔法攻击(可能因魔法值不足而失败)
            if u.magic_attack(ms):
                print('%s使用了魔法攻击.' % u.name)
            else:
                print('%s使用魔法失败.' % u.name)
        else:  # 10%的概率使用究极必杀技(如果魔法值不足则使用普通攻击)
            if u.huge_attack(m):
                print('%s使用究极必杀技虐了%s.' % (u.name, m.name))
            else:
                print('%s使用普通攻击打了%s.' % (u.name, m.name))
                print('%s的魔法值恢复了%d点.' % (u.name, u.resume()))
        if m.alive > 0:  # 如果选中的小怪兽没有死就回击奥特曼
            print('%s回击了%s.' % (m.name, u.name))
            m.attack(u)
        display_info(u, ms)  # 每个回合结束后显示奥特曼和小怪兽的信息
        fight_round += 1
    print('\n========战斗结束!========\n')
    if u.alive > 0:
        print('%s奥特曼胜利!' % u.name)
    else:
        print('小怪兽胜利!')


if __name__ == '__main__':
    main()

以上案例来源于 githup 中 学习Python100day有兴趣的同学请自行下载。
然后又留了几道作业题会在下一个博客中公布答案。
好了又到了一天中最激动人心的时刻了 分享一组情侣头像 请有对象儿的朋友自行保存。在这里插入图片描述
在这里插入图片描述
如果有喜欢的同学 请点赞收藏加转发 最好给投个硬币 晚上有没有鸡腿吃就看各位的了~~~

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值