11-20 python脚本编写实战3

环节一:作业讲解

上期作业帖:11-13 python脚本实战1

作业分析

  1. 写一个面向对象的例子:
  • 比如创建一个类(Animal)【动物类】,类里有属性(名称,颜色,年龄,性别),类方法(会叫,会跑)

  • 创建子类【猫】,继承【动物类】
  • 重写父类的__init__方法,继承父类的属性
  • 添加一个新的属性,毛发=短毛
  • 添加一个新的方法, 会捉老鼠,
  • 重写父类的【会叫】的方法,改成【喵喵叫】

  • 创建子类【狗】,继承【动物类】
  • 复写父类的__init__方法,继承父类的属性
  • 添加一个新的属性,毛发=长毛
  • 添加一个新的方法, 会看家
  • 复写父类的【会叫】的方法,改成【汪汪叫】
  1. 在入口函数中创建类的实例
  • 创建一个猫猫实例
  • 调用捉老鼠的方法
  • 打印【猫猫的姓名,颜色,年龄,性别,毛发,捉到了老鼠】
  • 创建一个狗狗实例
  • 调用【会看家】的方法
  • 打印【狗狗的姓名,颜色,年龄,性别,毛发】

作业实现

# 写一个面向对象的例子:
# 比如创建一个类(Animal)【动物类】,
# 类里有属性(名称,颜色,年龄,性别),
# 类方法(会叫,会跑)
class Animal:
    name = ''
    color = ''
    age = ''
    gender = ''

    def __init__(self, name, color, age, gender):
        self.name = name
        self.color = color
        self.age = age
        self.gender = gender

    def speak(self):
        print("会叫")

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


# 创建子类【猫】,继承【动物类】
class Cat(Animal):

    # 重写父类的__init__方法,继承父类的属性
    def __init__(self, name, color, age, gender):
        super(Cat, self).__init__(name, color, age, gender)
    # 添加一个新的属性,毛发=短毛
        self.fur = '短毛'

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

    # 重写父类的【会叫】的方法,改成【喵喵叫】
    def speak(self):
        print("喵喵叫")


# 创建子类【狗】,继承【动物类】
class Dog(Animal):

    # 复写父类的__init__方法,继承父类的属性
    def __init__(self, name, color, age, gender):
        super(Dog, self).__init__(name, color, age, gender)

    # 添加一个新的属性,毛发=长毛
        self.fur = '长毛'

    # 添加一个新的方法, 会看家
    def house_keeping(self):
        print(f"{self.name}会看家")

    # 复写父类的【会叫】的方法,改成【汪汪叫】
    def speak(self):
        print("汪汪叫")


# 在入口函数中创建类的实例
if __name__ == '__main__':
    # 创建一个猫猫实例
    cat = Cat('波斯', '橘黄', 2, '公的')

    # 调用捉老鼠的方法
    cat.catch_mouse()

    # 打印【猫猫的姓名,颜色,年龄,性别,毛发,捉到了老鼠】
    print(cat.name, cat.color, cat.age, cat.gender, "捉到了老鼠")
    print(f"名字:{cat.name}, 颜色:{cat.color}, 年龄:{cat.age}, "
          f"性别:{cat.gender}, 毛发:{cat.fur}, 捉到了老鼠。")

    # 创建一个狗狗实例
    dog = Dog('旺财', '黑色', 3, '母的')

    # 调用【会看家】的方法
    dog.house_keeping()

    # 打印【狗狗的姓名,颜色,年龄,性别,毛发】
    print(dog.name, dog.color, dog.age, dog.gender, dog.fur)
    print(f"狗狗的姓名:{dog.name},颜色:{dog.color},年龄:{dog.age},性别:{dog.gender},毛发:{dog.fur}")

作业点评

优秀作业:

  • 小小萱
  • sallypeng
  • 子谦
  • ckk
  • earlbyrd
  • Yocczy
  • wuting123456
  • 可可777
  • 窦靖超
  • lipanpan99
  • 丁莹

lipanpan99

有待提高:

  • 代码顺序

image-20211118144733068

  • pep8代码风格

image-20211118151826123

  • 类名、方法的命名

image-20211120122623062

语义:brak ==> bark

image-20211120122946816

环节二:实战练习:群主发普通红包

抢普通红包案例

某群有多个成员,群主给成员发普通红包。发红包的规则是:
1、群主负责发红包。红包金额从群主余额中扣除,按成员人数平均分成n等份,以备领取。
每个红包的金额为整数,如果有余数则加到最后一个红包中。

2、成员负责抢红包。抢到的红包金额存到自己余额中。
3、抢完红包后需要进行报数,打印格式“我是XX,现在有 XX 块钱。”。

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


环节三:实战讲解

分析

初步分析:

优化:

实现

# todo
1 个赞

菜鸟图图向子谦同学看齐 :rose:

1 个赞

子谦同学:

总体表现出色!能在规定时间内实现案例需求,为你点赞!

其中群主角色和群员角色的类和方法的抽象做的很好,发红包、抢红包、报数的功能也进行了实现。其中随机数字的生成,与终端用户的互动(input),以及各个对象之间的数据传递的实现,都能看出来具备良好的Python和逻辑思维,并且让案例变得十分有趣,值得大家学习!

后续可以优化的方向:尝试一下,通过提取公共属性,封装成父类和子类继承的方式来实现。

:+1:加油!

百里老师麻烦有时间看下

@djc

:+1: 代码简练,面向对象的知识掌握的不错。运行也OK,挺棒的。

同时,也有一些升级的空间:

  1. 继承关系可以重新梳理下,提取共性,形成群员和群主的公共父类。

  2. 这里的if True可以省略。

for self.people_number in range(1, self.people_number):
    if True:
        list_red.append(people_red)
  1. red_wars的抢红包功能还有继续优化的空间,比如加上随机抽取。目前是按顺序遍历。
for index, i in enumerate(list_red, 1):
    print(f"我是{index},我现在有{i}元")

加油~

好嘞,谢谢老师,我再去优化下


image
image
image