第十课:玩转你的“篮子” – 列表进阶与综合应用

  • 时长: 90 分钟
  • 教学目标:
    • 复习列表的基础操作(创建、索引、增删改、遍历)。
    • 学习检查列表中是否包含某个元素 (in 运算符)。
    • 学习查找元素在列表中的位置 (.index()) 和统计元素出现的次数 (.count())。
    • 学习获取列表中最大值 (max())、最小值 (min())、总和 (sum()) 的方法。
    • 学习对列表进行排序 (.sort(), sorted()) 和反转 (.reverse())。
    • 掌握如何将列表与 for 循环、while 循环和 if 条件判断结合使用,解决筛选、查找、统计等问题。
    • 通过综合练习,提升运用列表和控制结构解决实际问题的能力。

课程内容

1. 复习与引入 (10 分钟)

  • 复习: 快速回顾上一节课列表的基础知识:列表是用 [] 创建的,元素有索引(从 0 开始),如何增 .append(), .insert()、删 .remove(), .pop()、改 列表[索引] = 新值、查 列表[索引],以及用 for 循环遍历列表。
  • 提出问题: 老师提问:“上次我们创建了装动物、分数、待办事项的列表。现在,如果我想知道我的动物列表里有没有‘老虎’?我想知道‘小明’在学生名字列表里排在第几个?我想知道分数列表里最高分是多少?最低分是多少?所有分数的总和是多少?我想把分数从低到高或者从高到低排列起来?这些问题,我们之前学过的知识能解决吗?需要更方便的方法吗?”
  • 引出新知识: 这些都是处理列表时非常常见的需求。Python 为列表提供了很多内置的“技能”(方法或函数),可以方便地完成这些任务。同时,把列表和我们学过的循环、条件判断结合起来,能解决更多更复杂的问题。

2. 在列表中查找和计数 (15 分钟)

  • 检查是否存在 – in: 使用 in 运算符可以判断一个元素是否在列表中。结果是布尔值 (TrueFalse)。
    fruits = ["apple", "banana", "cherry", "apple"]
    print("banana" in fruits) # True
    print("orange" in fruits) # False
    
    # 可以在 if 语句中使用
    if "apple" in fruits:
      print("列表里有苹果!")
    
  • 查找位置 – .index(元素值): 查找指定元素第一次出现在列表中的索引位置。如果元素不存在,会报错。
    names = ["小明", "小红", "小刚", "小红", "小丽"]
    print(names.index("小明")) # 0
    print(names.index("小红")) # 1 (只找第一个)
    # print(names.index("小芳")) # 报错!
    
  • 统计次数 – .count(元素值): 统计指定元素在列表中出现的次数。
    fruits = ["apple", "banana", "cherry", "apple"]
    print(fruits.count("apple")) # 2
    print(fruits.count("banana")) # 1
    print(fruits.count("orange")) # 0
    
  • 动手实践: 学生创建一个列表,使用 in 检查某个元素是否存在。使用 .index() 查找元素位置,使用 .count() 统计元素次数。

3. 找出最大值、最小值和总和 (10 分钟)

  • max(列表): 找出列表中最大的元素。

  • min(列表): 找出列表中最小的元素。

  • sum(列表): 计算列表中所有数字的总和。(注意:sum() 只能用于存放数字的列表)。

    scores = [85, 92, 78, 95, 88]
    print("最高分:", max(scores)) # 95
    print("最低分:", min(scores)) # 78
    print("总分:", sum(scores)) # 438
    
    names = ["小明", "小红", "小刚"]
    print("名字最长的是:", max(names)) # 按照字母顺序比较,结果可能是 '小红' 或 '小明' 或 '小刚'
    # print(sum(names)) # 报错!不能对字符串列表求和
    
  • 动手实践: 学生创建一个数字列表,尝试使用 max(), min(), sum() 函数。

4. 给列表排序和反转 (15 分钟)

  • .sort() (原地排序): 对列表中的元素进行排序。默认是升序(从小到大)。会直接修改原来的列表。
    scores = [85, 92, 78, 95, 88]
    print("排序前:", scores)
    scores.sort() # 默认升序
    print("升序后:", scores) # 结果是 [78, 85, 88, 92, 95]
    
    names = ["小明", "小红", "小刚", "小丽"]
    names.sort() # 按拼音或字母顺序排序
    print("名字排序后:", names) # 结果是 ['小刚', '小丽', '小明', '小红']
    
    scores.sort(reverse=True) # 设置 reverse=True 可以降序 (从大到小)
    print("降序后:", scores) # 结果是 [95, 92, 88, 85, 78]
    
  • sorted(列表) (生成新列表): 创建一个新的已排序的列表,不会改变原来的列表。通常更推荐使用 sorted(),因为它不改变原始数据。
    original_scores = [85, 92, 78, 95, 88]
    sorted_scores_asc = sorted(original_scores) # 升序
    sorted_scores_desc = sorted(original_scores, reverse=True) # 降序
    
    print("原始列表:", original_scores) # [85, 92, 78, 95, 88]
    print("sorted 升序:", sorted_scores_asc) # [78, 85, 88, 92, 95]
    print("sorted 降序:", sorted_scores_desc) # [95, 92, 88, 85, 78]
    
  • .reverse() (原地反转): 将列表中的元素顺序颠倒,直接修改原来的列表。
    my_list = [1, 2, 3, 4, 5]
    print("反转前:", my_list)
    my_list.reverse()
    print("反转后:", my_list) # 结果是 [5, 4, 3, 2, 1]
    
  • 动手实践: 学生创建一个列表,尝试使用 .sort() 排序(升序和降序),使用 sorted() 获取排序后的新列表,使用 .reverse() 反转列表。

5. 列表与条件判断、循环的结合 (20 分钟)

  • 筛选列表元素: 使用 for 循环遍历列表,在循环体内部使用 if 语句判断元素是否符合某个条件,如果符合就打印或进行其他操作。
    print("--- 筛选分数 ---")
    scores = [85, 92, 78, 95, 88, 65, 50]
    print("及格分数有:")
    for score in scores:
      if score >= 60:
          print(score)
    
    print("--- 找出名字里包含'小'的同学 ---")
    names = ["小明", "大壮", "小红", "二牛", "小丽"]
    for name in names:
      if "小" in name: # 使用 in 检查字符串是否包含子串
          print(name)
    
  • 在列表中查找第一个符合条件的元素: 使用 forwhile 循环遍历,结合 if 判断条件,找到后使用 break 提前退出循环。
    print("--- 查找第一个偶数 ---")
    numbers = [1, 3, 5, 8, 9, 12, 15]
    first_even = None # 用一个变量记录找到的第一个偶数,初始为 None
    
    for num in numbers:
      if num % 2 == 0:
          first_even = num
          print("找到了第一个偶数:", first_even)
          break # 找到后就退出循环
    
  • 在列表中统计符合条件的元素个数: 使用 for 循环遍历,结合 if 判断条件,符合条件时让计数器变量加一。
    print("--- 统计优秀分数 ---")
    scores = [85, 92, 78, 95, 88, 65, 90, 99]
    excellent_count = 0 # 初始化计数器
    
    for score in scores:
      if score >= 90:
          excellent_count = excellent_count + 1 # 或者 excellent_count += 1
    
    print("优秀的人数有:", excellent_count, "个")
    
  • 动手实践: 学生编写代码,在一个数字列表中找出所有能被 3 整除的数字并打印。 在一个字符串列表中,找出所有长度大于 5 的字符串并打印。

6. 课堂综合练习 (15 分钟)

让学生独立完成以下练习,综合运用列表、循环和条件判断:

  • 练习 1: 编写一个程序,创建一个数字列表 ages = [12, 15, 8, 19, 25, 16, 7, 14]
    • 计算并打印列表中所有年龄的总和。
    • 找出并打印列表中最大的年龄和最小的年龄。
    • 统计列表中未成年人(年龄小于 18)的数量。
    ages = [12, 15, 8, 19, 25, 16, 7, 14]
    # TODO: 计算总和并打印
    # TODO: 找出最大值和最小值并打印
    # TODO: 统计未成年人数量并打印
    
  • 练习 2: 编写一个程序,创建一个字符串列表 words = ["apple", "banana", "cat", "dog", "elephant", "fox"]
    • 打印列表中所有以字母 ‘e’ 开头的单词。(提示:可以使用字符串的 .startswith() 方法或索引切片加条件判断)。
    • 询问用户输入一个字母,然后打印列表中所有包含这个字母的单词。
  • 练习 3: 编写一个程序,询问用户输入 5 个整数,将它们存储在一个列表中。然后对列表进行排序(从小到大),并打印排序后的列表。找出并打印排序后列表的中间那个数(如果列表元素是奇数个)。

7. 总结与提问 (10 分钟)

  • 回顾: 回顾本节课内容:列表的进阶操作 (in, .index(), .count(), max(), min(), sum(), .sort(), sorted(), .reverse()),以及如何将列表与 for 循环、while 循环、if 条件判断结合,实现筛选、查找、统计等功能。
  • 提问:
    • 如何检查数字 50 是否在列表 my_nums 中?
    • 如何找出列表 my_scores 中的最高分?
    • .sort()sorted() 有什么区别?
    • 如何用 for 循环和 if 语句在一个学生姓名列表中找出所有名字长度大于 3 的学生?
  • 答疑: 回答学生问题。

8. 布置课后作业 (5 分钟)

  • 作业 1: 创建一个列表,存放一些商品价格(浮点数)。计算并打印所有商品的总价格、最高价格和最低价格。
  • 作业 2: 创建一个列表,存放一些英文单词。要求用户输入一个字母,然后统计列表中有多少个单词是以用户输入的这个字母开头的(不区分大小写)。
  • 作业 3: 编写一个程序,询问用户输入 5 个整数,将它们存储在一个列表中。然后创建一个新的空列表,将原列表中所有的偶数添加到新列表中,最后打印新列表。
  • 作业 4: (选做) 编写一个程序,创建一个数字列表。找出列表中是否有重复的元素。如果找到重复的元素,打印出来(可以只打印找到的第一个重复元素即可)。(提示:可以使用嵌套循环,或者使用其他方法,挑战一下自己)。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。