IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> python小练习6--lambda表达式的使用 -> 正文阅读

[开发工具]python小练习6--lambda表达式的使用

class Student:
    """
    学生类:具有name,sex,age,score属性
    """
    __slots__ = ["__name", "__sex", "__age", "__score"]

    def __init__(self, name, sex, age, score):
        self.name = name
        self.sex = sex
        self.age = age
        self.score = score

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self, name):
        if isinstance(name, str):
            self.__name = name
        else:
            raise TypeError("name is a instrance of class str")

    @property
    def sex(self):
        return self.__sex

    @sex.setter
    def sex(self, sex):
        if isinstance(sex, str):
            sex = sex.lower()
            if sex in ["f", "m", "male", "female"]:
                if sex in ["f", "female"]:
                    self.__sex = "female"
                else:
                    self.__sex = "male"
                return

        raise ValueError("sex should be in [f , m , male, female]")

    @property
    def age(self):
        return self.__age

    @age.setter
    def age(self, age):
        if isinstance(age, int) and 6 <= age <= 18:
            self.__age = age
        else:
            raise ValueError("age should be a integer between 6 and 18")

    @property
    def score(self):
        return self.__score

    @score.setter
    def score(self, score):
        if isinstance(score, int) and 0 <= score <= 100:
            self.__score = score
        else:
            raise ValueError("score should be a integer between 0 and 100")

    def __str__(self):
        return "姓名:%s 性别:%s 年龄:%d 分数:%d" % (self.name, self.sex, self.age, self.score)


class Tool:
    @staticmethod
    def find_all(list_target, func_condition):
        """
        对传入列表进行筛选,获取满足指定条件的所有列表项的生成器
        :param list_target: 列表
        :param func_condition: 筛选条件
        :return: 返回满足筛选条件的生成器
        """
        for target in list_target:
            if func_condition(target):
                yield target

    @staticmethod
    def find_one(list_target, func_condition):
        """
        获取满足筛选条件的一个列表项
        :param list_target: 列表
        :param func_condition: 筛选条件
        :return: 返回满足筛选条件的一个列表项
        """
        for target in list_target:
            if func_condition(target):
                return target

    @staticmethod
    def count(list_target, func_condition):
        """
        计算满足筛选条件的列表项数目
        :param list_target: 列表
        :param func_condition: 筛选条件
        :return: 返回列表中满足筛选条件的列表项数目
        """
        i = 0
        for target in list_target:
            if func_condition(target):
                i += 1
        return i

    @staticmethod
    def get_all(list_target, func_condition):
        """
        获取列表中满足筛选条件的列表项中某个成员组成的一个列表
        :param list_target: 列表
        :param func_condition: 筛选条件
        :return: 返回列表项中满足条件的列表项成员组成的列表
        """
        lst = []
        for target in list_target:
            lst.append(func_condition(target))
        return lst

    @staticmethod
    def get_max(list_target, func_condition):
        """
        获取列表中满足筛选条件的列表项
        :param list_target: 列表
        :param func_condition: 筛选条件
        :return: 返回列表项中某个成员满足最值条件的列表项
        """
        if len(list_target) == 0:
            return None

        if len(list_target) == 1:
            return list_target[0]

        stud = list_target[0]

        for item in list_target[1:]:
            stud = func_condition(stud, item)
        return stud

    @staticmethod
    def get_down_sorts(list_target, func_condition):
        """
        返回根据筛选条件降序排列的列表项组成的列表
        :param list_target: 列表
        :param func_condition: 筛选条件
        :return: 根据某一筛选条件降序排列的列表
        """
        if len(list_target) < 2:
            return list_target

        sorted_list = []

        while len(list_target) > 0:
            item = Tool.get_max(list_target, func_condition)
            sorted_list.append(item)
            list_target.remove(item)
        return sorted_list


if __name__ == "__main__":
    stulist = [Student("张三", "m", 15, 70), Student("李四", "M", 16, 91), Student("王五", "F", 13, 88),
               Student("赵六", "F", 18, 86)]

    print("所有学生:")
    for stu in stulist:
        print(stu)
    print("*" * 20)
    print("年龄大于13的所有学生")
    for stu in Tool.find_all(stulist, lambda student: student.age > 13):
        print(stu)

    print("*" * 20)
    print("分数大于80分的所有学生信息")
    for stu in Tool.find_all(stulist, lambda student: student.score > 80):
        print(stu)

    print("*" * 20)
    print("所有女学生信息:")
    for stu in Tool.find_all(stulist, lambda student: student.sex == "female"):
        print(stu)
    print("*" * 20)
    print("获取姓名位张三的学生信息:")
    stu = Tool.find_one(stulist, lambda student: student.name == "张三")
    print(stu)

    print("*" * 20)
    print("分数大于80的学生人数:", end=" ")
    count = Tool.count(stulist, lambda student: student.score > 80)
    print(count)

    print("*" * 20)
    print("女学生人数:", end=" ")
    count = Tool.count(stulist, lambda student: student.sex == "female")
    print(count)

    print("所有学生姓名:", end=" ")
    namelist = Tool.get_all(stulist, lambda student: student.name)
    print(namelist)

    print("*" * 20)
    print("成绩最高的学生信息:")
    stu = Tool.get_max(stulist, lambda student1, student2: student1 if student1.score > student2.score else student2)
    print(stu)

    print("*" * 20)
    print("年龄最大的学生:")
    stu = Tool.get_max(stulist, lambda student1, student2: student1 if student1.age > student2.age else student2)
    print(stu)

    print("*" * 20)
    print("按成绩降序输出学生信息:")
    sorted_list = Tool.get_down_sorts(stulist, lambda student1,
                                                      student2: student1 if student1.score > student2.score else student2)
    for student in sorted_list:
        print(student)

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:45:36  更:2022-03-08 22:47:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/21 1:30:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码