美文网首页
2019-01-15

2019-01-15

作者: Little茂茂 | 来源:发表于2019-01-15 17:05 被阅读0次
    import json
    # 1.声明一个电脑类: 属性:品牌、颜色、内存大小 方法:打游戏、写代码、看视频
    # a.创建电脑类的对象,然后通过对象点的方式获取、修改、添加和删除它的属性
    # b.通过attr相关的方法去获取、修改、添加和删除它的属性
    
    
    class Computer:
        """
        电脑类
        """
        def __init__(self, brand='', color='', memory=0):
            self.brand = brand
            self.color = color
            self.memory = memory
    
        @staticmethod
        def play_game(game):
            print('玩儿%s' % game)
    
        def codding(self):
            print('用%s写代码' % self.brand)
    
        @staticmethod
        def watch_video(video):
            print('看%s' % video)
    
    
    # 2.声明一个人的类和狗的类:
    # 狗的属性:名字、颜色、年龄
    # 狗的方法:叫唤
    # 人的属性:名字、年龄、狗
    # 人的方法:遛狗
    # a.创建人的对象小明,让他拥有一条狗大黄,然后让小明去遛大黄
    class Dog:
        def __init__(self, name='', color='', age=0):
            self.name = name
            self.color = color
            self.age = age
    
        def shout(self):
            print('%s在嗷嗷叫!' % self.name)
    
    
    class Person:
        def __init__(self, name='', age=0, dog: Dog=None):
            self.name = name
            self.age = age
            self.dog = dog
    
        def took_the_dog(self):
            if self.dog:
                print('%s牵着%s在外面散步' % (self.name, self.dog.name))
            else:
                print('没有🐶!遛自己!')
    
    
    # 3.声明一个圆类:
    class YtValueError(Exception):
        def __str__(self):
            return '当前属性不能赋值!'
    
    
    class Circle:
        pi = 3.14159265357
    
        def __init__(self, radius, x=0, y=0):
            self.radius = radius
            self.x = x
            self.y = y
            self._area = 0
            # self._perimeter = 0
    
        @property
        def area(self):
            return self.radius**2*Circle.pi
    
        @area.setter
        def area(self,value):
            raise YtValueError
    
        # def area(self):
        #     """面积"""
        #     return self.radius**2*Circle.pi
        #
        def perimeter(self):
            """周长"""
            return 2*Circle.pi*self.radius
    
    
    # 4.创建一个学生类:
    # 属性:姓名,年龄,学号
    # 方法:答到,展示学生信息
    # 创建一个班级类:
    # 属性:学生,班级名
    # 方法:添加学生,删除学生,点名, 求班上学生的平均年龄
    class Student:
        def __init__(self, name='', age=0, study_id=''):
            self.name = name
            self.age = age
            self.study_id = study_id
    
        def replied(self):
            print('%s,到!' % self.name)
    
        def show_info(self):
            print('学号:%s 姓名:%s 年龄:%d' % (self.study_id, self.name, self.age))
    
        def add_to_file(self):
            """将对象保存到本地"""
            file_name = self.__class__.__name__+'.json'
            with open('files/'+file_name, 'w', encoding='utf-8') as f:
                json.dump(self.__dict__, f)
    
        @classmethod
        def get_student_in_file(cls):
            """将字典读出来抓换成对象"""
            file_name = cls.__name__+'.json'
            with open('files/'+file_name, encoding='utf-8') as f:
                dict1 = json.load(f)
                # 将字典转换成对象
                stu = cls()
                for key in dict1:
                    setattr(stu, key, dict1[key])
                return stu
    
    
    print('/=====验证=====')
    stu1 = Student('小明', 18, '001')
    stu1.add_to_file()
    
    stu2 = Student.get_student_in_file()
    print(stu2, stu2.name, stu2.age, stu2.study_id)
    
    print('=====验证=====/')
    
    
    class Class:
    
        def __init__(self, name, students: list = []):
            self.name = name
            self.students = students
            # 学号生成器
            self.__id_generation = ('stu'+str(num).rjust(3, '0') for num in range(100))
    
        def add_student(self):
            """添加学生"""
            # 1.输入信息
            name = input('姓名:')
            age = int(input('年龄:'))
            # 2.生成学号
            study_id = next(self.__id_generation)
            # 3.创建学生对象
            stu = Student(name, age)
            stu.study_id = study_id
            # 4.保存到班级中
            self.students.append(stu)
    
        def del_student_with_name(self, name):
            """按姓名删除学生"""
            count = 0
            for stu in self.students[:]:
                if stu.name == name:
                    count += 1
                    stu.show_info()
                    value = input('是否删除(Y/N):')
                    if value == 'Y' or value == 'y':
                        self.students.remove(stu)
            if count == 0:
                print('没有该学生!s')
    
        def call_the_roll(self):
            """点名"""
            for stu in self.students:
                print(stu.name)
                stu.replied()
    
        def get_mean_age(self):
            """求平均年龄"""
            sum1 = 0
            for stu in self.students:
                sum1 += stu.age
            return sum1/len(self.students)
    
    
    
    
    def main():
        print('=============第一题==============')
        cmp1 = Computer('联想', '黑色', 8)
        print(cmp1.brand)
        print(getattr(cmp1, 'brand', 'mac'))
    
        cmp1.memory = 16
        setattr(cmp1, 'memory', 16)
    
        # del cmp1.color
        delattr(cmp1, 'color')
    
        print('=============第二题==============')
        p1 = Person('小明', 18)
        p1.dog = Dog('大黄', '黑色', 3)
        p1.took_the_dog()
    
        print('=============第三题==============')
        c1 = Circle(3)
        print(c1.area)
    
        c1.radius = 1
        print(c1.area)
        # c1.area = 6
    
        print('=============第四题==============')
        cl1 = Class('py1809')
        for _ in range(4):
            cl1.add_student()
    
        print(cl1.get_mean_age())
    
    
    
    if __name__ == '__main__':
        main()
    
    # 1.建立一个汽车类Auto,包括轮胎个数,汽车颜色,车身重量,速度等成员变量,并通过不同的构造方法创建实例。至少要求 汽车能够加速 减速 停车。
    # 再定义一个小汽车类CarAuto 继承Auto 并添加空调、CD等成员变量 覆盖加速 减速的方法
    class Auto:
        def __init__(self, tyre=4, color='', weight=0, speed=0):
            self.tyre = tyre
            self.color = color
            self.weight = weight
            self.speed = speed
            self.__max_speed = 200
    
        def add_speed(self, value):
            """加速"""
            if self.speed + value > self.__max_speed:
                self.speed = self.__max_speed
            else:
                self.speed += value
    
        def sub_speed(self, value):
            """减速"""
            if self.speed - value < 0:
                self.speed = 0
    
            else:
                self.speed -= value
    
        def stop(self):
            self.speed = 0
    
    
    class CarAuto(Auto):
        def __init__(self, tyre=4, color='', weight=0, speed=0, cd='', air=''):
            super().__init__(tyre, color, weight, speed)
            self.CD = cd
            self.airConditioning = air
    
    
    def main():
        pass
    
    
    if __name__ == '__main__':
        main()
    
    # 4.写一个类,其功能是:1.解析指定的歌词文件的内容 2.按时间显示歌词
    # 提示:歌词文件的内容一般是按下面的格式进行存储的。
    # 歌词前面对应的是时间,在对应的时间点可以显示对应的歌词
    class Lyric:
        def __init__(self):
            self._time = 0
            self.word = ''
    
        @property
        def time(self):
            return self._time
    
        @time.setter
        def time(self, value: str):
            fen = value[1:3]
            miao = value[4:]
            self._time = float(fen)*60 + float(miao)
    
        def __gt__(self, other):
            return self.time > other.time
    
        def __repr__(self):
            return str(self.__dict__)
    
    
    class LyricAnalysis:
        # 歌名,作为对象的属性,不同的歌对应不同的解析器对象
        def __init__(self, song_name: str):
            self.__song_name = song_name
            self.__all_lyric = []
    
        def __deal_line(self, line):
            """处理每一行的歌词"""
            # print(line)
            # 1.将时间和歌词分开
            lines = line.split(']')
            # 2.获取词
            word = lines[-1]
            times = lines[:-1]
            for time_str in times:
                # 创建歌词对象
                lyric = Lyric()
                lyric.word = word
                lyric.time = time_str
                # 保存歌词
                self.__all_lyric.append(lyric)
    
        def get_lyric(self, time):
            """获取指定时间对应的词"""
            if not self.__all_lyric:
                # 1.读文件中的内容
                try:
                    with open('files/'+self.__song_name+'.lrc', encoding='utf-8') as f:
                        # 一行一行的读,读完为止
                        while True:
                            line = f.readline()
                            if not line:
                                break
                            else:
                                # 处理每一行的内容,分割出时间和词
                                self.__deal_line(line)
                except FileNotFoundError:
                    return '[~~没有歌词~~]'
    
                # 排序
                self.__all_lyric.sort(reverse=True)
    
            # 获取时间对应的词
            for lyric in self.__all_lyric:
                if lyric.time < time:
                    return lyric.word
    
    
    def main():
        la1 = LyricAnalysis('蓝莲花')
        print(la1.get_lyric(15))
        print(la1.get_lyric(100))
    
        la2 = LyricAnalysis('烟圈')
        print(la2.get_lyric(20))
    
    
    if __name__ == '__main__':
        main()
    
    

    相关文章

      网友评论

          本文标题:2019-01-15

          本文链接:https://www.haomeiwen.com/subject/fbiydqtx.html