上周五编程课,我让同学们写下本学期的三个学习目标。小鹏写完后问我:“郭老师,下周我能改一个吗?”我笑了:“有些承诺啊,就像刻在石板上的字,擦不掉喽。”

当孩子们遇上“不能改”的规则
说实话,教孩子编程这些年,我有个有趣的发现:孩子们对“不能改”这三个字,有种天生的“反抗心理”。作业写错了?擦掉重写。游戏输了?重开一局。但在编程世界里,有些东西一旦定下,还真就改不了——比如今天要讲的元组(Tuple)。
你可以把元组想象成甲秀楼门口那对石狮子——摆在那里多少年了,风吹雨打,位置没变过,模样也没变过。元组就是这样,创建之后,纹丝不动。
从“偷改游戏规则”说起
去年编程社团发生了一件趣事。我们组织小组比赛,用列表存储比赛规则:
rules = ("不许偷看别人代码", "按时提交", "独立完成")
# 现在谁想改?试试看?
# rules[2] = "可以互相讨论" # 直接报错!
结果有个机灵鬼不知怎么绕过了限制,偷偷把第三条改成了“可以互相讨论”。这下好了,比赛到一半,两个小组吵起来了。
今年我们学聪明了,改用元组:
rules = ("不许偷看别人代码", "按时提交", "独立完成")
# 现在谁想改?试试看?
# rules[2] = "可以互相讨论" # 直接报错!
元组就像你给全班同学的白纸黑字保证书——签了名,按了手印,想反悔?全班同学都看着呢。
创建元组:三种写法,一个脾气
写法一:最正经的括号法
# 郭老师的三个教学底线(绝不妥协)
bottom_lines = ("不糊弄孩子", "不急功近利", "不照本宣科")
print(f"我的底线:{bottom_lines}")
# 贵阳几个雷打不动的地标
landmarks = ("甲秀楼", "青岩古镇", "黔灵山")
写法二:其实括号能省(但逗号省不了)
# 注意看,没括号也是元组!
colors = "红色", "绿色", "蓝色"
print(type(colors)) # 输出:<class 'tuple'>
# 单个元素的元组(重点!)
single = ("只有我一个",) # 这个逗号不能少!
not_tuple = ("只有我一个") # 这是字符串,不是元组!
郭老师敲黑板:记住这个逗号!去年有8个同学在这里栽跟头,误把元组当字符串。
写法三:把“善变”的变成“固执”的
# 把列表“定”成元组
changeable_list = ["今天学", "明天忘", "后天补"]
fixed_tuple = tuple(changeable_list) # 现在固定了
# 字符串也能转
my_name = tuple("郭老师") # ('郭', '老', '师')
元组的“超能力”:一拆多
这是元组最实用的功能,看例子:
# 传统方法(有点啰嗦)
point = (100, 200)
x = point[0]
y = point[1]
# 元组解包(干净利落)
x, y = (100, 200)
print(f"x={x}, y={y}")
# 实战:学生信息拆解
student = ("李小萌", 11, "五年级", 96)
name, age, grade, score = student
print(f"{name}今年{age}岁,{grade},编程考{score}分")
最酷的来了——交换两个变量:
a = "苹果"
b = "香蕉"
print(f"交换前:a={a}, b={b}")
# 传统方法需要第三个人帮忙
temp = a
a = b
b = temp
# 元组解法:一秒互换
a, b = b, a
print(f"交换后:a={a}, b={b}")
元组能干什么?不能干什么?
能干的(都是“看”和“找”):
# 1. 按位置查看
days = ("周一", "周二", "周三", "周四", "周五")
print(days[0]) # 周一
print(days[-1]) # 周五(倒数第一)
# 2. 切一段看看
work_days = days[0:5] # 周一到周五
# 3. 挨个看看
for day in days:
print(f"{day}:好好学编程")
# 4. 找找在哪儿
colors = ("红", "绿", "蓝", "黄", "绿")
print(colors.index("蓝")) # 2(第一个蓝的位置)
# 5. 数数有几个
print(f"绿色出现了{colors.count('绿')}次")
# 6. 看看在不在
if "红" in colors:
print("找到红色了!")
不能干的(想都别想):
fixed = (1, 2, 3)
# 下面这些全都会报错!
# fixed[0] = 10 # 不能改
# fixed.append(4) # 不能加
# fixed.remove(2) # 不能删
# fixed.sort() # 不能排
什么时候用元组?一张表告诉你
| | |
|---|
| 固定不变 | | |
| 经常变化 | | |
| 做字典的钥匙 | | |
| 函数返回多个值 | | return 姓名, 年龄, 分数 |
| 需要排序过滤 | | |
关键点:如果你存的是一旦确定就不该改的东西,用元组。这是编程习惯,更是做事态度。
好的代码、好的学习、好的人生,都是在寻找平衡:
知道什么可以变,什么不能变——这大概也是成长中最重要的一课。
未完待续……