假设你想写个程序:随机点一个同学的名字回答问题,或者让程序"掷骰子"出 1~6。你会不会觉得得先学一大堆随机算法?不用。Python 装好的那一刻,就自带了一大抽屉成品工具,随手就能用——这就是标准库。掷骰子这件事,
import random之后一行random.randint(1, 6)就搞定,就像去超市买现成的调味料,不用从种辣椒开始。今天开三个最常用的工具抽屉:
random(随机,用来抽奖、点名、掷骰子)、math(数学计算,开方、取整)、datetime(日期时间,记录"今天是几号")。这三个以后天天见:游戏、抽奖、记录日志、做报表都用得上。今天不要求你背 API,重点是知道有这个抽屉,需要用的时候知道去哪翻——具体写法忘了就问 AI。
标准库是什么,怎么导入
标准库就是 Python 官方自带的一批工具模块,不用额外安装,import 一下就能用。每个模块是一个"工具箱",装着一组相关的功能。
导入有两种写法:
- 方式一:
import random,用的时候写random.randint(...)(先写模块名,再写函数名)。 - 方式二:
from random import randint,用的时候直接写randint(...)。
新手我建议用方式一。多带一个模块名,打字是多了几个,但一眼就能看出这个函数来自哪个工具箱;方式二函数多了容易重名,分不清谁是谁。两种方式先都见一见:
# 方式一:import 模块名,用的时候带模块名
import random
print(random.randint(1, 6))
# 方式二:from 模块 import 函数名,用的时候直接写函数名
from math import sqrt
print(sqrt(16))
输出(随机数那次每次不同,1~6 之间):
6
4.0
导入之后还可以查看模块里有什么:dir 看全部名字,help 看某个函数的说明。
import random
print(random.randint(1, 10)) # 随机整数
print(dir(random)[:5]) # 看看模块里前 5 个名字(不用背,扫一眼)
输出:
7(随机)
['BPF', 'Random', 'SystemRandom', 'WichmannHill', '__builtins__', ...]
两个最常见的导入报错,提前打个预防针:忘了 import 就写 random.randint(1, 6),报 NameError: name 'random' is not defined——先 import random;模块名写错,random、math、datetime 全小写,写成 from Random import ... 报 ModuleNotFoundError。
random:让程序"掷骰子、抽签"
random 帮程序产生"不固定"的数字或挑选结果,今天学 4 个:
random.randint(a, b):返回 a 到 b 之间的随机整数(含两头)。掷骰子就是randint(1, 6)。random.choice(列表):从列表里随机挑一个元素。点名、抽奖就是它。random.shuffle(列表):把列表顺序打乱(原地修改列表本身)。random.sample(列表, n):随机挑 n 个不重复的元素,返回新列表。
import random
# 1. 随机整数:randint(最小, 最大),两头都包含
print(random.randint(1, 6)) # 模拟掷骰子:1~6
# 2. 随机挑一个:choice(列表)
names = ["小明", "小红", "小刚", "小丽"]
print(random.choice(names)) # 随机点一个人的名字
# 3. 打乱顺序:shuffle 直接改原列表
cards = ["A", "2", "3", "4"]
random.shuffle(cards)
print(cards) # 顺序被打乱
# 4. 随机挑 n 个不重复的:sample(列表, n)
print(random.sample(names, 2)) # 随机挑 2 个不同的人
输出(每次运行都不一样,这只是其中一次):
5
小丽
['4', 'A', '3', '2']
['小红', '小明']
再演示一次"猜数字"里随机数的用法,下周进阶会用到:
import random
secret = random.randint(1, 100) # 电脑心里想一个 1~100 的数
print("心里想好了,范围 1~100")
print("答案(调试用):", secret) # 调试时可以打印出来,正式玩再删掉
输出:
心里想好了,范围 1~100
答案(调试用): 57
random 的几个脾气要摸清:
- randint 含头含尾:
randint(1, 6)能出 6。想掷骰子就用它,别用randrange(1, 6)(那个不含 6)。 - shuffle 没有返回值:
x = random.shuffle(列表)拿到的 x 是None,shuffle 是原地打乱,直接打印原列表。 - 随机数不能预测:每次运行结果都不同,这是特性不是 bug。要是调试时想"每次都一样",可以用
random.seed()(了解即可,资料里有)。
math:数学计算工具
math 提供数学运算函数和常量,常用的 5 个:
math.sqrt(x):开平方(结果是浮点数)。math.floor(x):向下取整(往小的方向取),floor(3.7)= 3。math.ceil(x):向上取整(往大的方向取),ceil(3.2)= 4。math.pi:圆周率 π(一个常量,不是函数,不用加括号)。math.pow(x, y):x 的 y 次方(和x ** y效果一样,看哪个顺手用哪个)。
import math
print(math.sqrt(16)) # 4.0(开平方,注意是浮点数)
print(math.floor(3.7)) # 3(向下取整)
print(math.ceil(3.2)) # 4(向上取整)
print(math.pi) # 3.141592653589793(圆周率常量)
print(math.pow(2, 10)) # 1024.0(2 的 10 次方)
print(2 ** 10) # 1024(用运算符也能算,结果还是整数)
输出:
4.0
3
4
3.141592653589793
1024.0
1024
注意看返回值:sqrt(16) 返回的是 4.0 而不是 4——返回的值要看清楚是整数还是小数,后面写代码经常在这上面栽跟头。
实际用一下——算圆的面积:
import math
r = 5
area = math.pi * r * r # 圆面积 = π r²
print(f"半径 {r} 的圆,面积是 {area:.2f}") # 保留两位小数
输出:
半径 5 的圆,面积是 78.54
math 的三个易错点:
- 常量不是函数:
math.pi没有括号,写成math.pi()报TypeError: 'float' object is not callable。 - 负数开方会报错:
math.sqrt(-1)报ValueError: math domain error。真实程序里要先判断数字是不是非负(下周四学的 try/except 就是兜这种的)。 - 取整方向别搞反:floor 永远往"小"取,ceil 永远往"大"取;
floor(3.999)是 3,ceil(3.001)是 4。
datetime:日期和时间
程序里经常要"记录这是什么时候发生的"——日志、报表、聊天记录都离不开。datetime 就是干这个的:
datetime.date.today():今天的日期,返回如2026-05-11。datetime.datetime.now():现在的日期 + 时间,返回如2026-05-11 14:30:22.123456。.strftime("格式"):把日期时间格式化成自定义字符串,比如"2026年05月11日"。today.timetuple().tm_yday:今天是这一年的第几天。
import datetime
# 1. 今天的日期(date 类型)
today = datetime.date.today()
print(today)
# 2. 现在的时间(datetime 类型,比 date 多一个时间)
now = datetime.datetime.now()
print(now)
# 3. 格式化输出:strftime 按格式拼字符串
print(today.strftime("%Y年%m月%d日"))
print(today.strftime("%Y-%m-%d")) # 常用日期格式
print(now.strftime("%Y-%m-%d %H:%M:%S")) # 常用"日期 时间"格式
# 4. 今天是这一年的第几天
print("今天是一年中的第", today.timetuple().tm_yday, "天")
输出:
2026-05-11
2026-05-11 14:30:22.123456
2026年05月11日
2026-05-11
2026-05-11 14:30:22
今天是一年中的第 131 天
strftime 里的格式字母不用背,用的时候查这张表:
| 符号 | 含义 | 示例输出 |
|---|---|---|
%Y |
四位年份 | 2026 |
%m |
两位月份 | 05 |
%d |
两位日期 | 11 |
%H |
24 小时制小时 | 14 |
%M |
分钟 | 30 |
%S |
秒 | 22 |
datetime 有三个地方容易迷糊:
- date 和 datetime 是两回事:
date只管"几月几号",datetime连"几点几分"一起管;要当前时间就用datetime.datetime.now()。 - 格式字母大小写敏感:
%m是月份、%M是分钟,写反了输出会怪怪的。 - 打印 date 对象直接 print 就行:
print(today)输出2026-05-11,不用手动转字符串;要自定义格式才用strftime。
随堂练习
-
练习一(掷骰子统计,必做):随机生成 1~6,连掷 10 次,统计每个点数出现的次数并打印。 提示:用
random.randint(1, 6)循环 10 次;用字典计数(第 3 周学过:出现过次数+1,第一次出现设为 1);最后for遍历字典打印。 -
练习二(随机点名):把全班同学的名字放列表里,用
random.choice随机点一个,点 3 次不重复。 提示:思路一(简单):点过的名字用remove从列表里移出去;思路二(推荐):先random.shuffle(列表)打乱,再按顺序取前 3 个。 -
练习三(日期输出):用
datetime输出今天的日期,并输出"今天是一年中的第几天",再输出"今天是星期几"。 提示:第几天用today.timetuple().tm_yday;星期几可以问 AI:"datetime 怎么输出今天是星期几"(strftime("%A")可以输出英文星期,也可以用weekday())。 -
★ 进阶题(猜数字升级):让电脑随机想一个 1~100 的数,用户循环猜,大了提示"大了"、小了提示"小了",猜对打印"恭喜"和猜的次数。 提示:
while True+break;猜的次数用一个变量累加;这题做出来就是第 4 周进阶作业"成绩记录"的雏形。
忘了用法?让 AI 帮你想
这三段提示词,想不起来某个函数怎么用的时候就丢给 AI——
场景:忘了某个标准库函数怎么用
提示词:
我是 Python 初学者。请问 random 模块里,怎么从一个列表里
随机挑 1 个元素、怎么挑 3 个不重复的元素?请用大白话解释,
给我一行示例代码,不要讲太深,我只想快速用起来。
场景:随机点名程序没思路
提示词:
我想写一个随机点名程序:全班 30 个同学放在一个列表里,
每次运行随机点 1 个人,点过的不能重复。请先给我思路
(用什么函数、分几步),不要直接给完整代码,我想自己写。
场景:日期格式化
提示词:
Python 里怎么把今天的日期输出成"2026年05月11日"这种格式?
怎么知道今天是一年中的第几天?给我简单示例代码并加注释,
我是初学者。
常见报错速查
| 报错信息 | 什么意思 | 怎么办 |
|---|---|---|
NameError: name 'random' is not defined |
忘了 import random |
文件最开头加 import random |
ModuleNotFoundError: No module named 'Random' |
模块名写错(大小写) | 标准库模块名全小写:random、math、datetime |
TypeError: 'float' object is not callable |
把常量当函数调用了(比如 math.pi()) |
常量不加括号:math.pi |
ValueError: math domain error |
对负数开方等非法运算 | 先判断数字非负,或用 try/except(下周四学) |
random.shuffle 后打印出来没变化 |
shuffle 是原地打乱,没有返回值 | 直接打印原列表,别把返回值赋给新变量 |
收个尾
今天的关键不是背下这几个函数名,而是建立起"Python 自带工具箱"这个意识:随机选 random,算数用 math,记时间用 datetime,具体写法忘了就查表、问 AI。你以后写程序,八成时间都在"找合适的抽屉",而不是从零造轮子。
明天开始学文件读写:怎么让数据"存得住"。今天 random 生成的成绩、datetime 记录的时间,明天就能写进文件保存下来——程序关掉再打开,数据还在。想想看,这解决了什么难题?