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的规范,只是约定私有
实战
某群有多个成员,群主给成员发普通红包。
发红包的规则是:
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()