【作业】2022.4.20 字典

这段代码展示了如何在Python中处理学生信息,包括统计不及格学生、查找特定条件的学生、排序等操作,并给出了班级信息和狗狗数据的处理示例,如获取狗的品种、颜色等信息。
  1. 定义一个变量保存一个学生的信息,学生信心中包括:姓名、年龄、成绩(单科)、电话、性别

    stu_001 = {'name': 'Ajax', 'age': 18, 'grade(math)': 100, 'tel': '110', 'gender': 'male'}
    
  2. 定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )

    1. 统计不及格学生的个数

    2. 打印不及格未成年学生的名字和对应的成绩

    3. 求所有男生的平均年龄

    4. 打印手机尾号是8的学生的名字

    5. 打印最高分和对应的学生的名字

    6. 删除性别不明的所有学生

    7. 将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)

        # 先创建学生信息
        students = [
            {'name': 'Ajax', 'age': 18, 'grade(math)': 100, 'tel': '11131230', 'gender': 'male'},
            {'name': 'Bjax', 'age': 17, 'grade(math)': 40, 'tel': '11124410', 'gender': 'male'},
            {'name': 'Cjax', 'age': 29, 'grade(math)': 30, 'tel': '11836310', 'gender': 'female'},
        
            # 这个数学-20分的人是扣书写分扣的
            {'name': 'Djax', 'age': 10, 'grade(math)': -20, 'tel': '11283620', 'gender': 'female'},
            {'name': 'Ejax', 'age': 11, 'grade(math)': 98, 'tel': '11381750'},
            {'name': 'Fjax', 'age': 16, 'grade(math)': 88, 'tel': '11183640', 'gender': 'male'},
        ]
        
        # 1. 统计不及格学生的个数
        count_1 = 0
        for stu in students:
            if stu['grade(math)'] < 60:
                count_1 += 1
        print('数学不及格学生人数是:', count_1)
        
        # 2. 打印不及格未成年学生的名字和对应的成绩
        
        # 用count_2统计目标学生人数
        count_2 = 0
        
        # 开始遍历
        for stu in students:
        
            # 如果找到了目标学生,就输出姓名和分数且人数+1
            if stu['grade(math)'] < 60 and stu['age'] < 18:
                count_2 += 1
                print(stu['name'], stu['grade(math)'])
        
        # 如果人数为0,就输出没有这样的学生
        if not count_2:
            print('没有这样的学生')
        
        # 3. 求所有男生的平均年龄
        sum_boys = count_boys = 0
        for stu in students:
            if stu.get('gender') == 'male':
                count_boys += 1
                sum_boys += stu['age']
        print(sum_boys // count_boys)
        
        # 4. 打印手机尾号是8的学生的名字
        
        # 用count_tel统计尾号8的人数
        count_tel = 0
        
        # 开始遍历
        for stu in students:
        
            # 如果尾号是8,输出名字,人数+1
            if int(stu['tel']) % 10 == 8:
                print(stu['name'])
                count_tel += 1
        
        # 循环完后,如果人数还是0,就输出没有这样的学生
        if not count_tel:
            print('没有这样的学生')
        
        # 5.
        grade_max = students[0]['grade(math)']
        name_max = [students[0]['name']]
        
        for stu in students[1::]:
        
            if stu['grade(math)'] > grade_max:
                grade_max = stu['grade(math)']
                name_max.clear()
                name_max.append(stu['name'])
                
            elif stu['grade(math)'] == grade_max:
                name_max.append(stu['name'])
                
        print(name_max, grade_max)
        
        # 6.
        for stu in students[:]:
        
            if not stu.get('gender'):
                students.remove(stu)
                
        print(students)
        
        # 7.
        # 方法零:由远古版本最强最恶の凶兽sort涅槃重生而来
        # 向seikai昭示着自己不可动摇的王者地位!!!!!!!
        # Kneel in front of him!!!!!
        students.sort(reverse=True, key=lambda x: x['grade(math)'])
        print(students)
        
        # 方法1:冒泡排序法
        n = len(students)
        for x in range(n - 1):
            for index_stu in range(n - x - 1):
                if students[index_stu]['grade(math)'] < students[index_stu + 1]['grade(math)']:
                    students[index_stu], students[index_stu + 1] = students[index_stu + 1], students[index_stu]
        print(students)
        
        # 方法2:中世纪版本的时代的眼泪(┬_┬)
        # 思路是每次遍历找出最高分的字典并放到前面
      
        # x表示选到第几名了(准确来说是x+1)
        # 由于最后剩的那个人肯定是最后一名,所以循环次数是长度-1
        for x in range(len(students) - 1):
            max_grade = students[x]['grade(math)']
            max_grade_stu = students[x]
            index_max_grade_stu = x
            for stu_other in students[x + 1::]:
                index_max_grade_stu += 1
                if stu_other['grade(math)'] > max_grade:
                    max_grade = stu_other['grade(math)']
                    max_grade_stu = stu_other
                    temp = students.pop(index_max_grade_stu)
                    students.insert(x, temp)
        print(students)
        
        # 方法3:远古版本的时代的眼泪(┬_┬)
        
        # 提取出每个人的成绩
        grades = [stu['grade(math)'] for stu in students]
        
        # 使用我们有且仅有的最强最恶の排序工具sort,此时分数就排好序了
        # 即现在分数的顺序,就是之后学生应该有的顺序
        grades.sort(reverse=True)
        
        # 设置一个记录下标的变量
        index_grade = 0
        
        # 遍历grades列表中的分数,即从高到低遍历一遍分数
        # 每取到一个分数,就遍历students列表中的元素
        # 如果找到与grades中分数匹配的人
        # 把他的信息取出来
        # 重新插入到students中与grades中分数的下标一样的位置
        # 每完成一次循环,下标+1,即第一名找完了找第二名,以此类推
        for grade_single in grades:
            for x in range(len(students)):
                if grade_single == students[x]['grade(math)']:
                    temp = students.pop(x)
                    students.insert(index_grade, temp)
                    index_grade += 1
        print(students)
      

笑死,根本不知道冒泡排序法这种东西

  1. 定义一个变量保存一个班级的信息,班级信息中包括:班级名称、教室位置、班主任信息、讲师信息、班级所有的学生(根据实际情况确定数据类型和具体信息)

    # 这是一份班级信息
    
    class_message = {
        'name': 'Cute',
        'location': 'XiChuan_middle_school',
        'head_teacher': {'name': 'MrsXu', 'tel': '12447372'},
        'lecturer': {'name': 'MrHua', 'tel': '1391237128'},
        'students': [
            {'name': 'cutie1', 'gender': 'male', 'linkman': {'name': 'big_cutie1', 'tel': '121238'}},
            {'name': 'cutie2', 'gender': 'female', 'linkman': {'name': 'big_cutie2', 'tel': '121248'}},
            {'name': 'cutie3', 'gender': 'male', 'linkman': {'name': 'big_cutie3', 'tel': '128665'}},
            {'name': 'cutie4', 'gender': 'male', 'linkman': {'name': 'big_cutie4', 'tel': '127798'}},
            {'name': 'cutie5', 'gender': 'female', 'linkman': {'name': 'big_cutie5', 'tel': '120878'}}
        ]
    }
    
  2. 已知一个列表保存了多个狗对应的字典:

    dogs = [
      {'name': '贝贝', 'color': '白色', 'breed': '银狐', 'age': 3, 'gender': '母'},
      {'name': '花花', 'color': '灰色', 'breed': '法斗', 'age': 2},
      {'name': '财财', 'color': '黑色', 'breed': '土狗', 'age': 5, 'gender': '公'},
      {'name': '包子', 'color': '黄色', 'breed': '哈士奇', 'age': 1},
      {'name': '可乐', 'color': '白色', 'breed': '银狐', 'age': 2},
      {'name': '旺财', 'color': '黄色', 'breed': '土狗', 'age': 2, 'gender': '母'}
    ]
    
    1. 利用列表推导式获取所有狗的品种

      [‘银狐’, ‘法斗’, ‘土狗’, ‘哈士奇’, ‘银狐’, ‘土狗’]

      # 这是一个获取狗品种的程序
      
      print([dog.get('breed', '这只狗不知道品种') for dog in dogs])
      
    2. 利用列表推导式获取所有白色狗的名字

      [‘贝贝’, ‘可乐’]

      # 这是一个获取白狗名字的程序
      
      white_dogs = [dog['name'] for dog in dogs if dog['color'] == '白色']
      if white_dogs:
          print(white_dogs)
      else:
          print('没有白色狗')
      
    3. 给dogs中没有性别的狗添加性别为 ‘公’

      # 这是一个将未知性别的狗定为公狗的程序
      
      for dog in dogs:
          dog.setdefault('gender', '公')
      
    4. 统计 ‘银狐’ 的数量

      # 这是一个统计银狐数量的程序
      
        count_silver_fox = 0
        for dog in dogs:
            if dog.get('breed') == '银狐':
                count_silver_fox += 1
        print(count_silver_fox)
      
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sprite.Nym

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值