Python课程第八天作业

第一题:

1
2
3
4
5
6
1.自定义一个 Fruit 类:该类有一个 类属性: identify:值为"水果",有两个对象属性: name,price:值由实例化对象时赋值,一个类方法: get_identify:打印类属性identify的值,一个对象方法:get_total_price(num):打印『%s个%s值%s钱』,一个静态方法:packing(*fruits)
    静态方法(装箱)的思路分析
    red_apple = Fruit("红苹果", 10)
    green_apple = Fruit("青苹果", 10)
    yellow_banana = Fruit("黄香蕉", 8)
    调用:Frulit.packing(red_apple, green_apple, yellow_banana) 打印:一箱装了2个苹果1个香蕉

示例代码:

复制代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-

class Fruit:
    identify = '水果'

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

    @classmethod
    def get_identify(cls):
        print(cls.identify)

    def get_total_price(self,num):
        total_price = self.price * num
        print('%s个%s值%s钱' % (num, self.name, total_price))

    @staticmethod
    def packing(*fruits):
        fruit_type=[]
        for i in  fruits:
            if "苹果" in i.name:
                fruit_type.append("苹果")
            if "香蕉" in i.name:
                fruit_type.append("香蕉")
        print('总共装箱数量为:')
        for k in set(fruit_type):
            print("%d个%s"%(fruit_type.count(k),k))


red_apple = Fruit("红苹果", 10)
green_apple = Fruit("青苹果", 10)
yellow_banana = Fruit("黄香蕉", 8)
black_banana = Fruit("泰国香蕉",88)
Fruit.packing(red_apple,green_apple,yellow_banana,black_banana)
复制代码

第二题:

1
2
3
4
5
    -- 对name属性进行封装,但是外界任然可以访问name以及设置name
    -- 有一个方法属性bmi(标准体重),可以获取一个人的bmi,bmi只读不可写,bmi计算规则
        -- 男:(身高cm-80)× 70﹪  |  女:(身高cm-70)× 60﹪
 
提示:类属性就是直接写在类中的变量,对象属性就是写在__init__方法中的用self.属性 = 值 赋值的属性,方法属性就是用 @property 修饰的方法伪装成的属性

示例代码:  

复制代码
class Person:
    def __init__(self, name, weight, height, sex):
        self.name = name
        self.weight = weight
        self.height = height
        self.sex = sex

    @property
    def bmi(self):
        if self.sex == '':
            return (self.height -80) * 0.7
        return (self.height - 70) * 0.6

tom=Person('tom',92,175,'')
print("%s 标准体重为 %.2f" %(tom.name,tom.bmi))
marry=Person('marry',88,168,'')
print("%s 标准体重为 %.2f" %(marry.name,marry.bmi))
复制代码

第三题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
用面向对象实现 植物大战僵尸游戏
 
1.定义一个僵尸Zombie类,该类可以实例化出多种僵尸对象,僵尸对象产生默认都有 名字name、血量HP、防具armor
    -- 名字:普通僵尸 | 路障僵尸 | 铁桶僵尸
    -- 血量:默认就是100,不需要外界提供
    -- 防具:不需要外界提供,从名字中分析确定,防具的值是一个列表,从名字分析得到
            -- ['无', 0] | ['路障', 5] | ['铁桶', 15]  => [防具名, 防具的防御值]
    -- 通过@property的getter、setter方式,对外提供防具的两个访问接口armor_name与armor_count
            -- armor_name可以取值、赋值、删除值:通过一个
                -- eg: 普通僵尸对象.armor_name = '铁桶',不仅改变了防具名
                --     普通僵尸对象的名字name也会变成 铁桶僵尸
            -- armor_count只可以取值
             
2.定义一个角色User类,该类有名字name属性、以及打僵尸的beat方法
    -- 名字:随意自定义
    -- beat:该方法需要传入一个僵尸对象
            -- 在方法内部可以实现:某某用户攻击了某某个僵尸,僵尸损失多少血,还剩多少血
            -- 每一次攻击,都固定扣除25滴血,但是不同的僵尸会被防具相应抵消掉一定的伤害值
            -- 循环攻击僵尸,3s攻击一次,僵尸被击杀后,打印 某某用户击杀了某某个僵尸 并结束方法
 
3.定义一个Game类,该类有一个name属性,属性值为 "植物大战僵尸" ,该类中有一个start方法,通过Game.start()来启动游戏
    -- 游戏一开始先显示游戏的名字 植物大战僵尸游戏
    -- 会随机产生三种僵尸,总共产生三个作为要被击杀的对象
    -- 生成一个有角色名的角色,依次去击杀随机产生的每一只僵尸
        -- 开始击杀第一只僵尸 => 某某用户攻击了某某个僵尸,僵尸损失多少血,还剩多少血 => 某某用户击杀了某某个僵尸 => 第一只僵尸已被击杀完毕 => 开始击杀第二只僵尸 ... => 第三只僵尸已被击杀完毕

示例代码:

复制代码
import time
import random

class Zombie:
    def __init__(self, name):
        self.armor_type = {'普通僵尸': 0, '路障僵尸': 5, '铁桶僵尸': 15}
        self.__name = name
        self.HP = 100
        self.armor = self.armor_type[self.__name]

    @property
    def armor_name(self):
        return self.armor, self.__name

    @armor_name.setter
    def armor_name(self, value):
        self.__name = value
        self.armor = self.armor_type[value]

    @property
    def armor_count(self):
        return self.armor


class User:
    def __init__(self, name):
        self.name = name

    def beat(self, zombie):
        while True:
            time.sleep(1)
            lose_blood = 25 - zombie.armor_count
            if zombie.HP <= lose_blood:
                print('%s击杀了%s' % (self.name, zombie.armor_name[1]))
                break
            zombie.HP -= lose_blood
            print('%s攻击了%s,%s损失了%s滴血,还是剩%s滴血' % (
            self.name, zombie.armor_name[1], zombie.armor_name[1], lose_blood, zombie.HP))


class Game:
    name = "植物大战僵尸"

    @classmethod
    def start(self):
        print('%s游戏' % self.name)
        zombie_list = ['普通僵尸', '路障僵尸', '铁桶僵尸']
        count = 0
        while count < 3:
            count += 1
            #zombie_type = zombie_list[random.randint(1, 10000) % 3]
            zombie_type = random.choice(zombie_list)
            zombie_name = Zombie(zombie_type)
            print('开始击杀第%s次僵尸' % (count))
            CJK = User('苍井空')
            CJK.beat(zombie_name)


Game.start()
复制代码

 

posted @   百衲本  阅读(675)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
cnblogs_post_body { color: black; font: 0.875em/1.5em "微软雅黑" , "PTSans" , "Arial" ,sans-serif; font-size: 15px; } cnblogs_post_body h1 { text-align:center; background: #333366; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 23px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h2 { text-align:center; background: #006699; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 20px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h3 { background: #2B6695; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 18px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } 回到顶部 博客侧边栏 回到顶部 页首代码 回到顶部 页脚代码
点击右上角即可分享
微信分享提示