python学习笔记16 类和对象习题

面向对象练习

  • 题目1:

使用面向对象的思想,编写自定义描述狗的信息。

设定属性包括:品种,年龄,心 情,名字;

​ 方法包括:叫,跑。

要求:

  1. 设置属性的私有访问权限,通过公有的 get,set 方法实现对属性的访问

  2. 限定心情只能有“心情好”和“心情不好”两种情况,如果无效输入进行提示, 默认设置“心情好”。

  3. 设置构造函数实现对属性赋值

  4. 叫和跑的方法,需要根据心情好坏,描述不同的行为方式。

编写测试类,测试狗类的对象及相关方法(测试数据信息自定义)

image-20240113153429837

class Dog:
    def __init__(self,name,age,variety,mood):
        self.__name=name
        self.__age=age
        self.__variety=variety
        self.set_mood(mood)

    def set_name(self,name):
        self.__name=name
    def get_name(self):
        return self.__name
    def set_age(self,age):
        self.__age=age
    def get_age(self):
        return self.__age
    def set_variety(self,variety):
        self.__variety=variety
    def get_variety(self):
        return self.__variety
    def set_mood(self,mood):
        if mood=="心情不好":
            self.__mood="心情不好"
        elif  mood=="心情好":
            self.__mood='心情很好'
        else:
            self.__mood = '心情很好'
            print( "输入信息错误,这只狗狗今天心情很好")

    def get_mood(self):
        return self.__mood

    def shout(self):
        if self.__mood=="心情很好":
            str1= "开心的汪汪叫"
        else:
            str1= "伤心的呜呜叫"

        return f"名字叫{self.get_name()}{self.get_variety()}{self.get_mood()},{str1}"
    def run(self):
        if self.__mood == "心情很好":
            str2= "开心的围着主人身边转"
        else:
            str2= "伤心的一动不动"
        return f"名字叫{self.get_name()}{self.get_variety()}{self.get_mood()},{str2}"
    def __str__(self):
        return f"{self.run()}\n{self.shout()}"


dog1=Dog("甜心",2,"贵宾犬","哈哈哈")
print(dog1.__str__())
print("=============================================")
dog2=Dog("太子",2,"德国牧羊犬","心情不好")
print(dog2.__str__())
  • 题目2:

以面向对象的思想,编写自定义类描述 IT 从业者。设定属性包括:姓名,年龄, 技术方向,工作年限, 工作单位和职务;方法包括:工作

要求:

  1. 设置属性的私有访问权限,通过公有的 get,set 方法实现对属性的访问

  2. 限定 IT 从业人员必须年满 15 岁,无效信息需提示,并设置默认年龄为 15。

  3. 限定“技术方向”是只读属性(只提供 get 方法)

  4. 工作方法通过输入参数,接收工作单位和职务,输出个人工作信息

编写测试类,测试 IT 从业者类的对象及相关方法(测试数据信息自定义)

image-20240113153528566

class Person:
    def __init__(self,name,age,direction,year,company,position):
        self.name=name
        self.set_age(age)
        self.direction=direction
        self.year=year
        self.company = company
        self.position = position

    def set_age(self, age):
        if  age >= 15:
            self.age = age
            return
        else:
            print("年龄信息无效!修改默认年龄为15")
            self.age = 15
            return
    def get_age(self):
        return self.age
    def work(self):
        print(f"目前就职于:{self.company}")
        print(f"职务是:{self.position}")
    def __str__(self):
        print(f"姓名:{self.name}")
        print(f"年龄:{self.age}")
        print(f"技术方向:{self.direction}")
        print(f"工作年限:{self.year}")
        self.work()


p1=Person("马未龙",35,"数据库维护",10,"腾讯实业","数据库维护工程师")
p1.__str__()
print("==============================")
p2=Person("张凯",6,"Java开发",1,"鼎盛科技","Java开发工程师")
p2.__str__()
  • 题目3:

请使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息。

设定

  1. 出租车类:

属性包括:车型,车牌,所属出租公司;方法包括:启动,停止

  1. 家用轿车类:

属性包括:车型,车牌,车主姓名;方法包括:启动,停止

要求

  1. 分析出租车和家用轿车的公共成员,提取出父类—汽车类

  2. 利用继承机制,实现出租车类和家用轿车类

  3. 编写测试类,分别测试汽车类,出租车类和家用轿车类对象的相关方法

  4. 定义名为car的包存放汽车类,出租车类,家用轿车类和测试类

image-20240113153600234

class Car:
    # def __init__(self):
    #     # self.variety=variety
    #     # self.id=id
    def start(self):
        print("我是车,我启动")
    def stop(self):
        print("我是车,我停止")

class taxiCar(Car):
    def __init__(self,id,taxi_company):
        self.id=id
        self.taxi_company=taxi_company
    def start(self):
        print("乘客您好")
        print(f"我是{self.taxi_company}的,我车牌是{self.id},您要去哪里?")
    def stop(self):
        print("目的地已经到了,请您付费下车,欢迎再次乘坐")
class familyCar(Car):
    def __init__(self,user_name):
        self.user_name=user_name
    def start(self):
        print(f"我是{self.user_name},我的汽车我做主")
    def stop(self):
        print("目的地到了,我们去玩吧")

c1=Car()
c1.start()
c1.stop()
print('=========================')
c2=familyCar("武大郎")
c2.start()
c2.stop()
print('=========================')
c3=taxiCar("京B123","景顺出租车公司")
c3.start()
c3.stop()
  • 题目4

某公司要开发新游戏,请用面向对象的思想,设计游戏中的蛇怪和蜈蚣精

设定

  1. 蛇怪类:

属性包括:怪物名字,生命值,攻击力

方法包括:攻击,移动(曲线移动),补血(当生命值<10时,可以补加20生命值)

  1. 蜈蚣精类:

属性包括:怪物名字,生命值,攻击力

方法包括:攻击,移动(飞行移动)

要求

  1. 分析蛇怪和蜈蚣精的公共成员,提取出父类—怪物类

  2. 利用继承机制,实现蛇怪类和蜈蚣精类

  3. 攻击方法,描述攻击状态。内容包括怪物名字,生命值,攻击力

  4. 编写测试类,分别测试蛇怪和蜈蚣精的对象及相关方法

  5. 定义名为mon的包存怪物类,蛇怪类,蜈蚣精类和测试类

class Monster:
    def __init__(self,name,health_value,attack_power):
        self.name=name
        self.health_value=health_value
        self.attack_power=attack_power
        print(f"怪物{self.name}展开攻击")
        print(f"当前生命值是:{self.health_value}")
        print(f"攻击力是:{self.attack_power}")
    def attack(self):
        print("")

    @abstractmethod
    def move(self):
        print("")

class Basilisk(Monster):
    def enrich_blood(self):
        if self.health_value < 10:
            print(f"实施大蛇补血术。。。。。,当前生命值是:{self.health_value+20}")
    def move(self):
        print("我是蛇怪,我走S型路线")


class Centipede(Monster):
    def move(self):
        print("我是蜈蚣精,御风飞行")

b1=Basilisk('蛇妖甲',5,20)
b1.enrich_blood()
b1.move()
print("================================================")
c1=Centipede('蜈蚣乙',60,15)
c1.move()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值