python脚本编写实战训练营2

PPT

霍格沃兹测试开发

脑图 xmind文件:
0327Python训练营2.xmind.zip (127.5 KB)

课堂内容

  • 作业讲解
  • Python 面向对象
  • 实战

上节课作业

# 创建一个类
class Animal:
    # 设置类属性
    name = ""
    color = ""
    age = ""
    sex = ""

    # 构造方法
    def __init__(self, name, color, age, sex):
        self.name = name
        self.color = color
        self.age = age
        self.sex = sex

    def speak(self):
        print(f"{self.name}会叫")

    def run(self):
        print(f"{self.name}会跑")


# 创建子类 cat

class Cat(Animal):

    # 重写父类的init方法
    def __init__(self, name, color, age, sex):
        super().__init__(name, color, age, sex)
        # 添加一个新的属性
        self.fur = "短发"

    # 添加一个新的方法
    def catch_mice(self):
        print(f"{self.name}会抓老鼠")

    def speak(self):
        print(f"{self.name}喵喵叫")


# 创建一个子类 dog

class Dog(Animal):
    # 重写父类的init方法
    def __init__(self, name, color, age, sex):
        super().__init__(name, color, age, sex)
        # 添加一个新的属性
        self.fur = "长毛"

    def house_keeping(self):
        print(f"{self.name}会看家")

    def speak(self):
        print(f"{self.name}汪汪叫")


if __name__ == '__main__':
    cat = Cat("Tom", "白色", "2", "男")
    cat.catch_mice()
    print(cat.name, cat.age, cat.color, cat.fur, cat.sex)
    dog = Dog("小白", "黑色", "1", "男")
    dog.house_keeping()
    print(dog.name, dog.fur, dog.age, dog.color, dog.sex)
  • 双下划线表示私有类型
  • 单下划线,只是PEP8的规范,只是约定私有

image
image

实战

某群有多个成员,群主给成员发普通红包。

发红包的规则是:
1、群主负责发红包,不能抢红包。红包金额从群主余额中扣除,按成员人数平均分成n等份,以备领取。
每个红包的金额为整数,如果有余数则加到最后一个红包中。
2、成员负责抢红包。抢到的红包金额存到自己余额中。
3、抢完红包后需要进行报数,打印格式“我是XX,现在有 XX 块钱。”。

请根据描述信息,完成案例中所有类的定义、类之间的继承关系,以及发红包、抢红包的操作。


import random

"""
实战
某群有多个成员,群主给成员发普通红包。

发红包的规则是:
1、群主负责发红包,不能抢红包。红包金额从群主余额中扣除,按成员人数平均分成n等份,以备领取。
每个红包的金额为整数,如果有余数则加到最后一个红包中。
2、成员负责抢红包。抢到的红包金额存到自己余额中。
3、抢完红包后需要进行报数,打印格式“我是XX,现在有 XX 块钱。”。

请根据描述信息,完成案例中所有类的定义、类之间的继承关系,以及发红包、抢红包的操作。
"""


class Person:

    def __init__(self, name, money):
        self.name = name
        self.money = money

    # 报数
    def show(self):
        print(f"我是{self.name},现在有{self.money}元")


class Manager(Person):
    # 发红包
    """
    红包金额从群主余额中扣除,按成员人数平均分成n等份
    每个红包的金额为整数,如果有余数则加到最后一个红包中
    """

    def send(self, money, num):
        # 发红包
        red_list = []
        if money > self.money:
            print("大忽悠")
        else:
            # 扣钱
            self.money -= money

            # 分红包
            avg = money // num
            mod = money % num

            # 先平均分
            for x in range(num):
                red_list.append(avg)
            # 如有余数,加到最后一个红包里
            red_list[-1] += mod

            return red_list


class Member(Person):
    # 抢红包

    """
    成员负责抢红包。抢到的红包金额存到自己余额中。
    抢完红包后需要进行报数
    """

    def grab(self, red_list):
        print(f"{self.name}抢红包")
        if not red_list:
            print("一块钱也不给")
            return None
        # 从红包列表随机选一个
        random_index = random.randint(0, len(red_list) - 1)
        lucky_money = red_list.pop(random_index)

        # 存钱
        self.money += lucky_money
        return self.money


if __name__ == '__main__':
    print("游戏开始")
    manger = Manager("张三", 100)
    a = Member("a", 0)
    b = Member("b", 0)
    c = Member("c", 0)

    # 开始前,检查每个人的钱包余额
    manger.show()
    a.show()
    b.show()
    c.show()

    # 发红包
    red_li = manger.send(10, 3)

    # 抢红包
    a.grab(red_li)
    b.grab(red_li)
    c.grab(red_li)

    # 报数
    a.show()
    b.show()
    c.show()
    manger.show()