python小练习7 -- 内置高阶函数

代码:

"""
    内置高阶函数:filter map max min sorted 介绍
"""


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)

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

    # filter根据条件筛选可迭代对象中满足条件的元素,返回新的可迭代对象
    # 获取所有性别位男的学生信息
    ret = filter(lambda student: student.sex == "male", stulist)
    for student in ret:
        print(student)
    print("*" * 20)

    # map使用可迭代对象中每个元素去调用函数,将返回值作为新的可迭代对象中的元素
    # 获取所有学生姓名,返回一个生成器
    ret = map(lambda student: student.name, stulist)
    print(ret)
    print("所有学生姓名:", end=" ")
    for name in ret:
        print(name, end=" ")
    print()

    print("*" * 20)
    # max根据函数进行筛选,返回满足条件的对象 max(可迭代对象, key=筛选函数)
    # 获取成绩最高的学生对象
    student = max(stulist, key=lambda stud: stud.score)
    print("成绩最高的学生信息:", student)

    print("*" * 20)
    # min
    # 获取年龄最小的学生对象
    student = min(stulist, key=lambda stud: stud.age)
    print("年龄最小的学生信息:", student)

    print("*" * 20)
    # sorted(可迭代对象,key=筛选函数)
    # 根据学生年龄排序,升序排列
    sorted_list = sorted(stulist, key=lambda stud: stud.age)
    for stud in sorted_list:
        print(stud)

    print("*" * 20)
    # 根据学生成绩降序排列
    sorted_list = sorted(stulist, key=lambda stud: stud.score, reverse=True)
    for stud in sorted_list:
        print(stud)

测试:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值