故事
作为一个准魔术师,Elyse 需要练习一些基本功。她有一摞牌,想对它们做一些操作。
为了简单一点,她只用 1 到 10 这十张牌。
我们把牌面值限制在 1 到 10,这样就只需要处理数字,
使用这个故事设计的练习也就只需依赖数字。
任务
以下任务示例符合 Elyse 身为初学者的故事:
- 从牌堆中取出一张牌
- 替换牌堆中的一张牌
- 在牌堆顶部插入一张牌
- 从牌堆中移除一张牌
- 移除牌堆最上面的牌
- 在牌堆底部插入一张牌
- 移除牌堆最下面的牌
- 查看牌堆的大小
这个故事可以继续延伸,用来教授数组分析:
- 找出某张牌的位置
- 判断某张牌是否存在
- 判断每张牌是否为偶数
- 检查牌堆中是否有奇数牌
- 从牌堆中取出第一张奇数牌
- 确定第一张偶数牌的位置
这个故事可以继续延伸,用来教授数组变换:
- 把每张牌的值翻倍
- 为牌堆中每个 3 创建多份副本
- 找出牌堆正中间的两张牌
- 让最外侧的两张牌出现在牌堆中间
- 所有不是 2 的牌都消失
- 把打乱的牌堆整理成完全有序的牌堆
- 把每张牌都改成牌的总数
这个故事可以继续延伸,用来教授数组解构:
- 取出第一张牌(不使用常规手段,例如下标访问或方法)
- 取出第二张牌(不使用常规手段,例如下标访问或方法)
- 交换前两张牌(不使用常规手段,例如下标访问或方法)
- 丢弃最上面的牌(不使用常规手段,例如下标访问或方法)
- 插入人头牌(不使用常规手段,例如下标访问或方法)
术语
以下是对说明中反复出现的术语的建议,而非硬性规则(包括起始文件中的说明):
- 主角是 Elyse,她的代词是 she/her。如果需要指代这个角色,请使用她的名字或用代词指代她。
- 不要用
array(或等价的数据类型),要用牌堆这个词
- 不要用
element,要用牌这个词
- 不要用
length,要用牌堆的大小
-
最上面的牌是_第一个元素_
-
最下面的牌是_最后一个元素_
实现
备选版本
故事的另一个版本以你(学生)为主角,只关注如何重新排列牌组。
故事
你是一名魔术师,手里有一副牌。为了顺利完成魔术,你需要能把一张牌从一个位置移到另一个位置。也就是说,你需要能重新排列整副牌。当然,你希望能朝两个方向移动牌,并且能说出“从牌堆顶部”或“从牌堆底部”。
任务
以下任务示例符合你想重新排列牌的故事:
- 实现一个函数 arrange,把牌堆中的一张牌从给定位置移到另一个位置,并返回新的牌堆
- 实现一个函数 rearrange,功能相同,但会直接修改原牌堆
实现
参考资料