想象比知识更重要
编程能让想象变成现实
~Python少儿编程课堂来啦~
调皮数字的“排队难题”
在数字王国里,有5个数字宝宝:7、11、3、2、5。它们每天都要排队做早操,但今天它们闹脾气了,故意乱站队形,把队伍搞得乱七八糟。数字国王急坏了,赶紧发布“寻宝任务”:请编程小达人帮忙,用“选择排序”魔法,从乱乱的队伍里,一次次找出“最小的数字宝宝”,把它送到队伍最前面,直到所有数字都按“从小到大”的顺序排好队,完成任务就能获得“数字排序小勇士”勋章哦!🏅悄悄提示:这个“寻宝任务”,本质就是我们今天要学的选择排序算法——所谓选择排序,就是“一次次选最小,一次次放正确”,像剥橘子一样,从外到内,一步步把混乱变整齐~
游戏思路拆解轻松闯关
很多小达人看到“排序”“算法”,会想到之前学过的冒泡,但今天我们使用一个新的工具来闯关!我们先来拆解今天的核心任务,再设计游戏模块~
01
把大难题变小游戏
核心任务:把“7,11,3,2,5”按从小到大排序
拆解成4个小关卡(每一关都是一次“寻宝+安放”):
关卡2:从剩下的数字(7、11、3、5)中,找出最小的数字宝宝,把它和队伍第二个位置的数字(7)交换,让它站到第二个位置;
02
给游戏搭好“小框架”
动手编写“排序魔法”
# 模块1:准备数字队伍(调皮的数字宝宝们)num_list = [7, 11, 3, 2, 5]print("排序前的数字队伍:", num_list) # 打印一下,看看一开始的混乱队伍# 模块2+3:寻宝+安放(重复执行,直到所有数字归位)# 外层循环:控制“关卡”,一共4关(5个数字,只需要4次交换)for i in range(len(num_list) - 1): # 假设当前最前面的数字,就是“暂时最小”的(先猜一个宝藏位置) min_index = i # min_index 就是最小数字宝宝的“位置坐标” # 内层循环:真正的“寻宝”,找剩下数字里最小的宝宝 for j in range(i + 1, len(num_list)): # 如果找到比“暂时最小”更小的数字,就更新宝藏坐标 if num_list[j] < num_list[min_index]: min_index = j # 安放宝藏:把找到的最小数字,和当前关卡的“空位”交换位置 num_list[i], num_list[min_index] = num_list[min_index], num_list[i] # 打印每一关的结果,看看数字宝宝们的变化 print(f"第{i+1}关结束,当前队伍:", num_list)# 任务完成!打印最终的整齐队伍print("🎉 排序完成!整齐的数字队伍:", num_list)
# 模块1:准备数字队伍(调皮的数字宝宝们)
num_list = [7, 11, 3, 2, 5]
print("排序前的数字队伍:", num_list) # 打印一下,看看一开始的混乱队伍
# 模块2+3:寻宝+安放(重复执行,直到所有数字归位)
# 外层循环:控制“关卡”,一共4关(5个数字,只需要4次交换)
for i in range(len(num_list) - 1):
# 假设当前最前面的数字,就是“暂时最小”的(先猜一个宝藏位置)
min_index = i # min_index 就是最小数字宝宝的“位置坐标”
# 内层循环:真正的“寻宝”,找剩下数字里最小的宝宝
for j in range(i + 1, len(num_list)):
# 如果找到比“暂时最小”更小的数字,就更新宝藏坐标
if num_list[j] < num_list[min_index]:
min_index = j
# 安放宝藏:把找到的最小数字,和当前关卡的“空位”交换位置
num_list[i], num_list[min_index] = num_list[min_index], num_list[i]
# 打印每一关的结果,看看数字宝宝们的变化
print(f"第{i+1}关结束,当前队伍:", num_list)
# 任务完成!打印最终的整齐队伍
print("🎉 排序完成!整齐的数字队伍:", num_list)
我们一句一句来看,解开代码的“魔法密码”:
for i in range(len(num_list) - 1)
min_index = i
for j in range(i + 1, len(num_list))
if num_list[j] < num_list[min_index]
num_list[i], num_list[min_index] = ...
运行结果
当我们运行这段代码,就能看到下面的结果,数字宝宝们一步步排好队啦:
排序前的数字队伍: [7, 11, 3, 2, 5]第1关结束,当前队伍: [2, 11, 3, 7, 5]第2关结束,当前队伍: [2, 3, 11, 7, 5]第3关结束,当前队伍: [2, 3, 5, 7, 11]第4关结束,当前队伍: [2, 3, 5, 7, 11]🎉 排序完成!整齐的数字队伍: [2, 3, 5, 7, 11]!
排序前的数字队伍: [7, 11, 3, 2, 5]
第1关结束,当前队伍: [2, 11, 3, 7, 5]
第2关结束,当前队伍: [2, 3, 11, 7, 5]
第3关结束,当前队伍: [2, 3, 5, 7, 11]
第4关结束,当前队伍: [2, 3, 5, 7, 11]
🎉 排序完成!整齐的数字队伍: [2, 3, 5, 7, 11]!
拓展挑战
(文末彩蛋:关注我,少儿编程不迷路,每天进步一点点!)