第十八课:Python 的“工具箱” – 模块的初步使用

  • 时长: 90 分钟
  • 教学目标:
    • 理解“模块”的概念:别人写好的、可以拿来用的 Python 代码文件。
    • 知道为什么需要使用模块(省时省力,利用别人的智慧)。
    • 学会使用 import 关键字将模块引入到自己的程序中。
    • 掌握如何使用模块中提供的函数和变量。
    • 通过使用 math 模块学习进行更复杂的数学计算。
    • 通过使用 random 模块学习如何让程序产生随机性(比如实现简单的摇骰子、抽签)。
    • 初步了解 import 的不同形式(as 别名,from...import)。

课程内容

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

  • 复习: 快速回顾错误处理 try...except 和文件操作。 提及我们自己写代码来完成任务(比如计算平均分、找列表最大值)。
  • 提出问题: 老师提问:“如果我想计算一个数的平方根怎么办?比如根号 9 是 3。或者我想计算圆的面积需要用到圆周率 π (大概 3.14159)。再或者我想让电脑帮我随机选一个幸运数字,或者模拟扔骰子,怎么做到呢?这些功能我们自己写是不是很麻烦?”
  • 引出模块: 其实,很多常用的功能(比如各种数学计算、生成随机数、处理时间和日期等等),已经有很多厉害的程序员帮我们写好了,打包成一个个叫做模块 (Module)的文件,就像一个个专门的“工具箱”。我们只需要把这些工具箱“拿过来”用就行了,不用自己重新制造工具。

2. 什么是模块? (10 分钟)

  • 概念: 模块就是一个包含 Python 代码的文件(通常是以 .py 结尾)。这个文件里可以有函数、变量、甚至类(以后会学)。
  • 打个比方:
    • 模块就像一个乐高积木套装,里面有很多不同形状和功能的积木(函数、变量),你可以拿来用。
    • 模块就像一个文具盒,里面有铅笔(函数)、橡皮(函数)、尺子(变量 π)等工具,你需要用哪个就拿哪个。
  • 标准库: Python 自己就自带了很多非常实用的模块,这些模块被称为 Python 的“标准库”。我们今天学的 mathrandom 就是标准库中的模块。

3. 把工具箱“拿过来” – import 语句 (15 分钟)

  • 作用: 使用 import 关键字,可以把一个模块“加载”到我们的程序中,这样我们就可以使用这个模块里的工具了。
  • 语法: import 模块名称
  • 演示:
    # 导入 math 模块 (数学工具箱)
    import math
    
    # 导入 random 模块 (随机数工具箱)
    import random
    
    print("模块导入完成。") # 导入成功后,通常不会有输出
    # 如果模块名写错了,import 会报错:ModuleNotFoundError
    # import maths # 错误!模块名可能写错了
    
  • 动手实践: 学生尝试导入 math 模块和 random 模块。 故意把模块名写错,观察 ModuleNotFoundError 错误。

4. 使用工具箱里的“工具” – 访问模块内容 (15 分钟)

  • 语法: 导入模块后,要使用模块里面的函数或变量,需要先写模块名,然后用一个点 . 连接要使用的函数或变量的名字。
    import math
    
    # 使用 math 模块里的 pi 变量 (圆周率)
    print("圆周率 π 大约是:", math.pi)
    
    # 使用 math 模块里的 sqrt 函数 (平方根)
    num = 9
    sqrt_result = math.sqrt(num)
    print(f"{num} 的平方根是:", sqrt_result)
    
    radius = 5
    # 使用 math.pi 计算圆的面积
    area = math.pi * radius * radius
    print(f"半径为 {radius} 的圆的面积是:", area)
    
    import random
    
    # 使用 random 模块里的 randint 函数 (生成指定范围内的随机整数,包含两端)
    # 模拟扔骰子 (生成 1 到 6 的随机整数)
    dice_roll = random.randint(1, 6)
    print("你扔的骰子点数是:", dice_roll)
    
    # 随机选择列表中的一个元素 (使用 random.choice 函数)
    fruits = ["苹果", "香蕉", "橙子", "葡萄"]
    lucky_fruit = random.choice(fruits)
    print("今天你的幸运水果是:", lucky_fruit)
    
  • 演示: 老师演示导入 math 模块并使用 math.pimath.sqrt()。 演示导入 random 模块并使用 random.randint()random.choice()
  • 动手实践: 学生尝试使用 math 模块计算其他数字的平方根。 尝试使用 random.randint() 生成 1 到 100 之间的随机数。 尝试使用 random.choice() 从自己创建的列表中随机选一个元素。

5. 更多导入方式 (简单介绍) (10 分钟)

  • 导入并起别名 (import ... as ...): 如果模块名字很长,或者想给模块起个短一点的名字,可以使用 as 关键字。
    import random as rd # 给 random 模块起个别名叫 rd
    
    print("用别名调用随机整数函数:", rd.randint(1, 10))
    # 现在不能再用 random.randint 了,只能用 rd.randint
    
  • 只导入模块中的部分内容 (from ... import ...): 如果只需要模块中的少数几个函数或变量,可以使用 from 模块名 import 名称1, 名称2, ...。 这样使用时就不用写模块名和点 . 了。
    from math import pi, sqrt # 只从 math 模块导入 pi 和 sqrt
    
    print("直接使用 pi:", pi)       # 不用写 math.pi
    print("直接使用 sqrt:", sqrt(25)) # 不用写 math.sqrt(25)
    
    # from random import * # 不建议初学者使用这种方式,它会导入模块里的所有东西,容易混淆名字
    
  • 讲解目的: 让学生了解有不同的导入方式,知道它们的基本语法。 强调初学者优先使用 import 模块名称 的方式,这样使用时需要写 模块名称.功能名称,能清楚地知道这个功能是从哪个模块来的,避免名字冲突。
  • 动手实践: 学生尝试使用 import ... as ...random 模块起个别名,然后使用别名调用函数。 尝试使用 from math import pi,然后直接打印 pi

6. 课堂练习 (15 分钟)

让学生独立完成以下练习:

  • 练习 1: 编写一个程序,导入 math 模块,计算半径为 10 的圆的周长和面积并打印出来。(周长 = 2 * π * 半径,面积 = π * 半径²)。
    import math
    radius = 10
    # TODO: 计算周长和面积,使用 math.pi
    # TODO: 打印结果
    
  • 练习 2: 编写一个程序,导入 random 模块,模拟掷硬币 5 次。每次都随机打印“正面”或“反面”。(提示:可以使用 random.randint(0, 1)random.choice(["正面", "反面"]),结合 for 循环重复 5 次)。
  • 练习 3: 编写一个程序,导入 random 模块。创建一个学生名字列表。使用 random.choice() 从列表中随机抽取一名学生,打印出“恭喜 [随机抽取到的学生名字],你是今天的幸运儿!”

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

  • 回顾: 回顾本节课内容:模块的概念(工具箱),为什么要用模块,import 模块名 导入模块,使用 模块名.功能名 调用模块内容。 学习了 math 模块(数学运算)和 random 模块(随机数)。 简单了解了 as 别名和 from...import
  • 提问:
    • 模块是什么?有什么用?
    • 如何把一个叫做 time 的模块导入到你的程序里?
    • 导入 math 模块后,如何使用里面的圆周率 π? 如何计算 16 的平方根?
    • 导入 random 模块后,如何生成一个 1 到 100 之间的随机整数? 如何从列表 [a, b, c] 中随机选一个元素?
    • 为什么初学者建议使用 import 模块名 这种方式导入?
  • 答疑: 回答学生问题。

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

  • 作业 1: 编写一个程序,导入 math 模块,计算并打印 2 的 8 次方(可以使用 math.pow() 函数或 ** 运算符)以及 64 的平方根。
  • 作业 2: 编写一个程序,导入 random 模块,模拟生成 6 个双色球号码:5个红色球(1-33 之间的随机整数,不能重复)和1个蓝色球(1-16 之间的随机整数)。打印生成的号码。(提示:红色球不重复可以先生成一个范围内的数字列表,然后使用 random.sample() 或循环配合检查是否已存在)。
  • 作业 3: (选做) 编写一个简单的石头剪刀布游戏。导入 random 模块,让电脑随机出一个手势(石头、剪刀、布)。然后让用户输入一个手势,判断用户赢、输还是平局。 使用 if-elif-else 结构进行判断。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。