day16-作业

1.建立一个汽车类Auto,包括轮胎个数,汽车颜色,车身重量,速度等属性,并通过不同的构造方法创建实例。至少要求 汽车能够加速 减速 停车。 再定义一个小汽车类CarAuto 继承Auto 并添加空调、CD属性,并且重新实现方法覆盖加速、减速的方法

class Auto:
    tire = 4

    def __init__(self, color, weight, speed):
        self.color = color
        self.weight = weight
        self.speed = speed

    def add_speed(self):
        print('加速1')

    @classmethod
    def sub_speed(self):
        print('减速1')

    @staticmethod
    def stop():
        print('停车!1')


class CarAuto(Auto):
    kt = '空调'
    cd = 'cd'

    def add_speed(self):
        print('加速2')

    @classmethod
    def sub_speed(cls):
        print('减速2')


car = CarAuto('黑色', 1400, 240)

print(car.color, car.weight, car.speed)
print(CarAuto.kt, CarAuto.cd)

car.add_speed()
CarAuto.sub_speed()

2.创建一个Person类,添加一个类字段用来统计Perosn类的对象的个数

class Person:
    all_number = 0

    def __init__(self):
        Person.all_number += 1

    def __del__(self):
        Person.all_number -= 1

    @classmethod
    def show_num(cls):
        print('目前被创造的对象个数:{}'.format(Person.all_number))


Person.show_num()

all_person_list = []                 # 对象列表
for i in range(50):                  # 建造50个对象
    all_person_list.append(Person())

Person.show_num()

for i in range(15):                  # 删除15个对象
    all_person_list.pop()

Person.show_num()

目前被创造的对象个数:0
目前被创造的对象个数:50
目前被创造的对象个数:35

3.创建一个动物类,拥有属性:性别、年龄、颜色、类型 ,

要求打印这个类的对象的时候以'/XXX的对象: 性别-? 年龄-? 颜色-? 类型-?/' 的形式来打印

class Animal:
    def __init__(self,sex,age,color,kind):
        self.sex = sex
        self.age = age
        self.color = color
        self.kind = kind

    def show(self):
        print('{}的对象:性别-{} 年龄-{} 颜色-{} 类型-{}'.format(self.__class__,self.sex,self.age,self.color,self.kind))


a = Animal('公',3,'黑色','狗')

a.show()

<class '__main__.Animal'>的对象:性别-公 年龄-3 颜色-黑色 类型-狗

4.写一个圆类, 拥有属性半径、面积和周长;要求获取面积和周长的时候的时候可以根据半径的值把对应的值取到。但是给面积和周长赋值的时候,程序直接崩溃,并且提示改属性不能赋值

class Circle:
    pi = 3.141592653

    def __init__(self,r):
        self.r = r
        self._area = 0
        self._perimeter = 0

    @property
    def area(self):
        return Circle.pi * self.r ** 2

    @area.setter
    def area(self, value):
        raise ValueError

    @property
    def perimeter(self):
        return Circle.pi * self.r * 2

    @perimeter.setter
    def perimeter(self, value):
        raise ValueError


a = Circle(5)
print(a.area)
print(a.perimeter)

# a.area = 100
# a.perimeter = 100

5.写一个扑克类, 要求拥有发牌和洗牌的功能(具体的属性和其他功能自己根据实际情况发挥)

from random import *


class Poker:

    def __init__(self):
        self.card_list = [i + str(j) for i in ['红桃', '黑桃', '方块', '梅花'] for j in range(2, 11)] + [i + j for i in ['红桃', '黑桃', '方块', '梅花'] for j in ['A', 'J', 'Q', 'K']]

    def shuffle_card(self):
        shuffle(self.card_list)

    def get_card(self):
        new_card = iter(self.card_list)
        num = input('你想发几张牌:')
        for _ in range(int(num)):
            print(next(new_card))


a = Poker()        # 生成牌对象
a.shuffle_card()   # 打乱牌序
a.get_card()       # 发牌

你想发几张牌:7
红桃7
黑桃5
梅花K
方块9
红桃5
红桃8
黑桃6

6.(尝试)写一个类,其功能是:1.解析指定的歌词文件的内容 2.按时间显示歌词 提示:歌词文件的内容一般是按下面的格式进行存储的。歌词前面对应的是时间,在对应的时间点可以显示对应的歌词
[00:00.20]蓝莲花
[00:00.80]没有什么能够阻挡
[00:06.53]你对自由地向往
[00:11.59]天马行空的生涯
[00:16.53]你的心了无牵挂
[02:11.27][01:50.22][00:21.95]穿过幽暗地岁月
[02:16.51][01:55.46][00:26.83]也曾感到彷徨
[02:21.81][02:00.60][00:32.30]当你低头地瞬间
[02:26.79][02:05.72][00:37.16]才发觉脚下的路
[02:32.17][00:42.69]心中那自由地世界
[02:37.20][00:47.58]如此的清澈高远
[02:42.32][00:52.72]盛开着永不凋零
[02:47.83][00:57.47]蓝莲花

lyrics = """
[00:00.20]蓝莲花   
[00:00.80]没有什么能够阻挡   
[00:06.53]你对自由地向往   
[00:11.59]天马行空的生涯  
[00:16.53]你的心了无牵挂   
[02:11.27][01:50.22][00:21.95]穿过幽暗地岁月   
[02:16.51][01:55.46][00:26.83]也曾感到彷徨   
[02:21.81][02:00.60][00:32.30]当你低头地瞬间  
[02:26.79][02:05.72][00:37.16]才发觉脚下的路   
[02:32.17][00:42.69]心中那自由地世界  
[02:37.20][00:47.58]如此的清澈高远   
[02:42.32][00:52.72]盛开着永不凋零   
[02:47.83][00:57.47]蓝莲花
"""


class Lyrics:

    def __init__(self: str, lyc):
        self.lyc = lyc

    def parsing(self):                                             # 解析函数
        list1 = self.lyc.split('\n')                               # 去除换行符
        list1 = [i for i in list1 if i != '']                      # 去除空元素
        list1 = [i.strip() for i in list1]                         # 去除空格

        list2 = [[float(i[j:j + 10][1:3] + i[j:j + 10][4:9]),      # 分析歌词切片成需要的列表
                  i[i.rfind(']') + 1:]] for i in list1 for j \
                 in range(len(i) - 9) if i[j] == '[']

        list2.sort(key=lambda x: x[0])                             # 将列表以时间大小的顺序排列

        return list2

    def show_lyc(self, time1: str):                                # 显示函数
        time1 = float(time1[0:2] + time1[3:])                      # 将输入的字符串转化成浮点以比较时间大小

        for each in range(len(self.parsing())):                    # 遍历列表,找到大于输入时间的元素返回上一句歌词
            if time1 <= self.parsing()[each][0]:
                return self.parsing()[each-1][1]


a = Lyrics(lyrics)

print(a.show_lyc('00:15.53'))
print(a.show_lyc('02:15.60'))
print(a.show_lyc('00:49.58'))

天马行空的生涯
穿过幽暗地岁月
如此的清澈高远
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。