小刚注册游戏账号,网页提示:密码太弱啦!请包含大小写字母和数字,至少 8 位。
小刚挠头:abcdef 太弱,123456 更弱,可自己想的密码不是记不住就是通不过检查。
同桌小美凑过来:让电脑帮你生成一个不就行了!电脑最会「变」字符串——变大写、变小写、数长度、切一段,还会随机抽字符拼起来。
小刚恍然大悟:字符串在 Python 里就像有魔法——能拼接、能重复、能切开、能翻转。今天就来学这些「字符串魔法」,再让电脑当你的密码管家!
让字符串学会「变身」:拼接、重复、数长度、取字符、切一段、转大小写——再用随机数造一个自己的密码生成器!
先看这节课教什么、怎么分配 120 分钟,老师心里有底,课堂节奏就不乱。
| 时间 | 环节 | 做什么 / 师生互动要点 |
|---|---|---|
| 0–5 | 候课 · 设备检查 | 开机 → 打开编辑器 → 确认作品文件夹就位。 |
| 5–12 | 上节回顾 · 快问快答 | import 干什么?randint 含不含两端?choice 从哪抽?谁做了随机点名器? |
| 12–20 | 情景导入 | 讲「账号密码被吐槽太弱」的故事:密码既要记得住又要够强——让电脑帮我们生成一个。 |
| 20–35 | 知识讲解 | 字符串基础(拼接/重复/len)→ 索引(从 0 开始、负数倒着数)→ 切片(顾头不顾尾、反转)。 |
| 35–55 | 示范代码 + 上机(示例1~3) | 拼接重复实验 → 索引取字符 → 切片取一段,每段代码都先猜结果再运行。 |
| 55–72 | 字符串方法 + 上机(示例4) | upper/lower/replace 变身 + isupper/islower/isdigit 自报家门,给密码强度检查做铺垫。 |
| 72–90 | 主项目:密码生成器 | 字符池拼接 → for 循环拼密码 → 计数器查三类字符 → 强度三档判断,分段带读后整体上机。 |
| 90–100 | 课堂练习 A/B | 练习 1 生成 10 位密码;练习 2 输入一句话输出长度/大写/小写;投屏找茬。 |
| 100–108 | 挑战练习 C | 回文判断器(s[::-1]);学有余力的同学做邮箱格式检查。 |
| 108–115 | 总结 · 保存作品 | 齐读口诀;保存「第11课_密码生成器.py」;预告第 12 课期末大项目! |
| 115–120 | 布置作业 · 预告 | 布置必做/选做/思考;预告:用一学期学的所有本领做文字冒险游戏。 |
时间轴把 2 小时切成 8 段:复习→导入→讲解→示范→上机→练习→检测→小结,每段都有明确产出。
先用 5 分钟把上节课的记忆叫醒,再用故事和类比把新知识挂到孩子已有的经验上。
问 1:import random 之后,掷骰子用哪个函数?它含不含两端?
→ random.randint(1, 6);含两端,真的可能出 6。 randint 不是顾头不顾尾。
问 2:random.choice(["石头","剪刀","布"]) 是干嘛的?
→ 从列表里随机选一个元素返回。 列表 = 方括号 + 逗号。
问 3:石头剪刀布 v2 里 continue 是干嘛的?
→ 输入错字时跳过本轮,回到 while 开头重新输入,不计数。 break 出圈,continue 回圈。
小刚注册游戏账号,网页提示:密码太弱啦!请包含大小写字母和数字,至少 8 位。
小刚挠头:abcdef 太弱,123456 更弱,可自己想的密码不是记不住就是通不过检查。
同桌小美凑过来:让电脑帮你生成一个不就行了!电脑最会「变」字符串——变大写、变小写、数长度、切一段,还会随机抽字符拼起来。
小刚恍然大悟:字符串在 Python 里就像有魔法——能拼接、能重复、能切开、能翻转。今天就来学这些「字符串魔法」,再让电脑当你的密码管家!
每个字符是一颗珠子,整串用引号穿着;可以串起来(+)、复制一串(*)、数有几颗(len)。
字符序列第一颗珠子编号 0(不是 1!),往后 1、2、3……从后往前数用负数:-1 是最后一颗。
从 0 开始s[起始:结束] 从彩带中间剪一段,顾头不顾尾:s[0:3] 剪到第 2 颗为止,第 3 颗不剪。
取子串s.upper() 变大声(大写)、s.lower() 变小声(小写)、s.replace("a","b") 把 a 换成 b。
变身咒语分小块讲透语法点,每一块都配生活类比 + 要点小结,讲完立刻口头小试。
字符串就是用引号括起来的文字。除了打印,它还有三样本领:拼接、重复、数长度。
拼接 +:"小" + "刚" 得到 "小刚"(第 1 课就见过);拼接时别忘了每段都要加引号。
重复 *:"ha" * 3 得到 "hahaha"——字符串乘整数,把整串复制 N 遍(第 6 课打印三角形用过)。
数长度 len():len("Python") 得到 6——数一数里面有几个字符,空格也算一个哦。
字符串里的每个字符都有编号,用 方括号 加编号就能取出那一个字符,这个编号叫索引。
索引从 0 开始!s = "Python",s[0] 是 "P",s[1] 是 "y",s[5] 是 "n"——第 6 个字符的编号是 5。
负数索引从右往左数:s[-1] 是最后一个字符 "n",s[-2] 是 "o"。倒数第 1 个 = -1。
注意:取出的单个字符还是字符串;用 s[6](超出长度)会报错 IndexError。
想取字符串的一段,用切片:s[起始:结束],从起始编号取到结束编号之前(顾头不顾尾)。
s = "Python":s[0:3] 取 "Pyt"(第 0~2 个,第 3 个不取);结束位置永远取不到。
偷懒写法:s[:3] 和 s[0:3] 一样(开头省略 = 从 0 开始);s[3:] 从第 3 个取到末尾。
反转神技 s[::-1]:把字符串倒过来。"Python"[::-1] 得到 "nohtyP"——回文判断就靠它!
字符串「自带」很多方法(函数),写法是 字符串.方法名(),像对它念一句咒语。
变大写 s.upper():"hello".upper() 得到 "HELLO";变小写 s.lower():"Hello".lower() 得到 "hello"。
替换 s.replace(旧, 新):"banana".replace("a", "o") 得到 "bonono"——把所有的 a 都换成 o。
自报家门三兄弟:s.isupper() 问「我全是大写吗?」、s.islower() 问「我全是小写吗?」、s.isdigit() 问「我全是数字吗?」——回答 True 或 False,密码强度检查就靠它们。
老师先带读代码、讲注释,再让学生亲手敲一遍——敲错正好学习调试。
# 第11课:字符串基础操作
first = "小"
last = "刚"
print("拼接:" + first + last) # 用+把两段拼起来
print("重复:" + "ha" * 3) # 字符串乘3
print("长度:" + str(len("Python"))) # len数有几个字符
print("空格也算:" + str(len("a b")))拼接:小刚
重复:hahaha
长度:6
空格也算:3🤔 想一想:len("小刚") 会得到几?中文一个字符算 1 个长度哦,上机验证一下。
# 用索引取单个字符
s = "Python"
print("s[0] = " + s[0]) # 第一个字符:P
print("s[1] = " + s[1]) # 第二个字符:y
print("s[5] = " + s[5]) # 第六个字符:n
print("s[-1] = " + s[-1]) # 倒数第一个:n
print("s[-2] = " + s[-2]) # 倒数第二个:os[0] = P
s[1] = y
s[5] = n
s[-1] = n
s[-2] = o🤔 想一想:s[6] 会取出什么?试试看会报什么错(超出长度啦)。
# 用切片取字符串的一段
s2 = "Python"
print("s2[0:3] = " + s2[0:3]) # 取第0~2个:Pyt
print("s2[:3] = " + s2[:3]) # 省略开头=从0开始
print("s2[3:] = " + s2[3:]) # 从第3个到末尾
print("s2[::-1] = " + s2[::-1]) # 反转:nohtyPs2[0:3] = Pyt
s2[:3] = Pyt
s2[3:] = hon
s2[::-1] = nohtyP🤔 想一想:切片 s2[0:3] 为什么没有第 3 个字符 t?记住切片「顾头不顾尾」。
# 常用字符串方法演示
s = "Hello Python"
print("原字符串:" + s)
print("转大写:" + s.upper())
print("转小写:" + s.lower())
print("把o换成0:" + s.replace("o", "0"))
print("全是数字吗:" + str("123".isdigit()))
print("全是大写吗:" + str("ABC".isupper()))原字符串:Hello Python
转大写:HELLO PYTHON
转小写:hello python
把o换成0:Hell0 Pyth0n
全是数字吗:True
全是大写吗:True🤔 想一想:s.replace("o","0") 之后,s 本身变了吗?打印 s 看看——它还是 "Hello Python",方法返回的是新字符串。
# 第11课主项目:随机密码生成器
# 功能:生成随机密码,并检查密码强度
import random
import string
# 字符池:大小写字母 + 数字 + 特殊符号
all_chars = string.ascii_letters + string.digits + "!@#$%^&*"
length = int(input("请输入密码长度(建议8位以上):"))
password = ""
for i in range(length): # 拼 length 次
password = password + random.choice(all_chars) # 每次随机抽一个字符接在后面
print("生成的密码是:" + password)
# ---- 检查强度:数一数有几种字符 ----
upper_count = 0 # 大写字母计数
lower_count = 0 # 小写字母计数
digit_count = 0 # 数字计数
for c in password:
if c.isupper():
upper_count = upper_count + 1
elif c.islower():
lower_count = lower_count + 1
elif c.isdigit():
digit_count = digit_count + 1
if len(password) >= 8 and upper_count > 0 and lower_count > 0 and digit_count > 0:
print("密码强度:强")
elif len(password) >= 6:
print("密码强度:中")
else:
print("密码强度:弱,建议加长")请输入密码长度(建议8位以上):10
生成的密码是:Kp7!dQ2@xL
密码强度:强🤔 想一想:循环里 password = password + random.choice(all_chars) 在做什么?(从空字符串开始,每轮尾巴上加一个随机字符——和累加器有点像!)
把最容易翻车的写法先亮出来,见一次、错一次、就会了。
s = "Python"
print(s[1]) # 以为取 Ps = "Python"
print(s[0]) # 才是 Ps[0:3] # 以为取到第3个s[0:3] # 取第0~2个,第3个不取print("长度是" + len(s)) # 报错print("长度是" + str(len(s)))基础题人人过关,进阶题鼓励尝试,挑战题给学有余力的孩子。参考答案给老师做巡视对照。
收尾前 10 分钟,用口答 / 举手抢答把今天的关键点过一遍。
字符串 "Python" 的第 1 个字符是 s[0] 还是 s[1]?
💡 编程里数数从 0 开始。
s[-1] 取的是哪个字符?
💡 负数索引从右往左数,-1 是倒数第一个。
s[0:3] 取出的是哪几个字符?
💡 切片顾头不顾尾,第 3 个取不到。
"ha" * 3 等于什么?len("a b") 等于几?
💡 * 是重复,len 是数长度。
想把字符串 "abc" 变成 "ABC",用哪个方法?
💡 lower() 是变小写,isdigit() 是问「是不是数字」。
用一句话带走今天的内容;作业分层布置,作品记得保存进成长档案。