Files
iOS_2026_National_Day/tasks/01-basics.md
T
ryansanchez7115 848db15277 更正第一题:添加物品须在运行时从控制台输入;iPad 不适用于第一题
- 重写“4. 从控制台添加物品与运行案例”,明确 readLine 输入及重复、空输入、清单外物品的处理
- 学习范围补充 while、readLine 与可选值的最基本处理;考察重点补充“输入与更新”
- 环境指南:iPad 不能用于第一题,新增控制台输入验证与中文输入报错处理
- 首页加入更正提示
2026-10-02 17:48:52 +08:00

11 KiB
Raw Blame History

第一题 出门检查器

  • 类型:基础语法与代码题(必做)
  • 基础要求:Swift 基础语法,含控制台输入
  • 提交材料:源码和真实运行截图
  • AI 规则:仅可辅助学习和讲解基础知识,解题、编码与排错须独立完成

任务背景与概述

出门前,你有一份“需要带的物品”清单,也知道哪些物品已经放进包里。请写一个程序,对照两份清单,告诉你还缺什么。

本题是一道 Swift 基础练习:定义数组,编写并调用函数,从控制台读取输入来更新清单,再根据结果输出信息。初始数据写在代码中;往包里添加物品,必须在程序运行时从控制台输入,不能通过修改源码里的数组再重新运行来完成。不需要图形界面。

2026-10-02 更正:原题面“输入数据直接写在代码中,不需要实现键盘输入”的表述有误,现已更正为上述要求,并重写了“4. 从控制台添加物品与运行案例”。已按旧题面完成的同学,请把 B、C 两个案例改为从控制台输入;函数接口、输出要求和 D–F 案例不变。

任务详细要求

1. 输入数据与命名规则

使用下面两个字符串数组作为初始数据:

let requiredItems = ["校园卡", "钥匙", "水杯", "耳机"]
var packedItems = ["手机", "校园卡", "钥匙"]
  • requiredItems 是本次需要带的物品。
  • packedItems 是已经放进包里的物品,可能包含本次清单之外的东西。
  • 初始数组使用上述变量名。packedItems 会在运行时根据控制台输入添加物品,因此使用 var;其他自定义变量的名称清楚即可。
  • 本题保证每个数组内部没有重复名称,也没有空名称。名称按字符串完全相同判断,无需处理错别字、空格清理或模糊匹配。
  • 缺少的物品应按 requiredItems 中的先后顺序返回。
  • 本题只判断物品是否存在,不处理数量。

2. 函数要求

编写函数,接收需要清单和已装入清单,返回缺少物品的数组。请使用以下函数名称、参数标签和类型:

func findMissingItems(required: [String], packed: [String]) -> [String]

上面只是接口说明,函数体由你编写。没有缺少物品时返回空数组。函数应适用于符合规则的其他清单,不能把示例答案直接写死。

3. 输出要求

调用函数,每次检查都输出:

  • 案例名称、需要带的物品、已装入的物品;
  • 缺少物品的名称和数量;没有缺少物品时明确显示“无”或空数组,数量为 0;
  • 需要清单非空且没有缺少物品时,输出“已经准备好了,可以出发”;
  • 需要清单为空时,输出“本次没有必带物品,无需检查”。

初始数据的一种输出形式如下:

案例 A:初次检查
需要带的物品:校园卡、钥匙、水杯、耳机
已装入的物品:手机、校园卡、钥匙
缺少的物品:水杯、耳机
缺少数量:2

输出排版可以自行安排,只要信息清楚。标点、空格和数组的显示样式不要求与示例逐字一致。手机不在需要清单里,不影响结果。

4. 从控制台添加物品与运行案例

在同一个程序、同一次运行中完成 A–F。

A–C:从控制台添加物品

  1. 先检查初始数据并输出,得到案例 A。
  2. 只要还有缺少的物品,就给出提示,用 readLine() 从控制台读取一行,作为要放进包里的物品名称,添加到 packedItems,再重新调用函数并输出结果。
  3. 重复第 2 步,直到没有缺少的物品,输出准备齐全的提示。

处理输入时遵守以下规则:

  • 输入的名称已经在 packedItems 里:提示它已经在包里,不重复添加。
  • 输入的物品不在需要清单里:照常添加(和初始数据里的手机一样),不影响结果。
  • 直接回车(输入为空)或读不到输入:结束添加,继续执行后面的案例。
  • 名称仍按字符串完全相同判断。

录制运行截图时,请依次输入“水杯”和“耳机”,得到案例 B、C。交互过程的一种形式如下:

缺少的物品:水杯、耳机
缺少数量:2
请输入放进包里的物品(直接回车结束):水杯
添加“水杯”后
已装入的物品:手机、校园卡、钥匙、水杯
缺少的物品:耳机
缺少数量:1
请输入放进包里的物品(直接回车结束):耳机

提示文字和排版可以自行安排。

D–F:固定数据

添加环节结束后,使用 D、E、F 的数据(写在代码中)继续调用函数并输出。

案例 需要带的物品 已装入的物品 函数应返回
A 初次检查 校园卡、钥匙、水杯、耳机 手机、校园卡、钥匙 水杯、耳机
B 输入“水杯”后 校园卡、钥匙、水杯、耳机 手机、校园卡、钥匙、水杯 耳机
C 再输入“耳机”后 校园卡、钥匙、水杯、耳机 手机、校园卡、钥匙、水杯、耳机 空数组
D 包里什么都没有 钥匙、水杯 空数组 钥匙、水杯
E 本次没有必带物品 空数组 手机 空数组
F 两份清单都为空 空数组 空数组 空数组

C 输出准备齐全的提示;E、F 输出无需检查的提示。

如果你的终端无法正确读入中文(输入“水杯”后程序认不出来),先按开发环境配置指南的“常见报错”处理;仍无法解决时,可以把两份清单中的物品名称统一换成英文或拼音(例如 cup、earphones),并在邮件正文说明,这不影响评价。

提交材料、方式与格式规范

提交材料与格式

材料 格式与要求
源码 文件名为 main.swift,使用 UTF-8 编码,包含函数、调用、控制台输入和 A–F 案例;保持缩进和命名清楚,必要处添加注释
运行截图 使用 PNG 或 JPG,文字清晰,能辨认案例名称、控制台输入的内容与实际输出,覆盖 A–F;可分多张,按 run-01.png、run-02.png 等顺序命名,JPG 使用相应扩展名

源码和截图应来自同一个最终版本。允许裁去无关窗口,不得修改运行结果文字、拼造结果或用 AI 生成截图。未全部完成时可提交当前源码与实际结果,标注未完成处。

提交方式

第一题与第二题一起打包成 姓名-学号-QQ.zip,于 10 月 3 日至 10 月 7 日 23:59 通过邮件发送到 iOS 部接收邮箱(在招新 QQ 群公布),邮件主题为 姓名-学号-QQ。压缩包内,本题源码放在 01-basics/main.swift,运行截图放在 01-basics/screenshots/。完整目录示例与步骤见前两题提交说明。

不需要额外提交设计文档、学习笔记或调试报告。

运行环境

本题需要能编译运行 Swift 命令行程序,并能在终端里输入,不需要 Mac:Windows 可用 VS Code + 官方 Swift 工具链,Mac 安装 Command Line Tools 即可。iPad 的 Swift Playground 无法在控制台输入,不能用于本题;没有可用电脑的同学,请尽快在招新 QQ 群联系干部协调。具体步骤与常见报错见开发环境配置指南。

学习范围与资源

学习到能使用下面这些内容即可:

  • let、var,字符串与布尔值;
  • 数组的创建、遍历、添加、数量和空数组;
  • if/else、for-in、while;
  • 函数参数、返回值和调用;
  • print 输出及字符串插值;
  • readLine() 读取一行控制台输入,以及用 if let 或 ?? 处理“可能读不到内容”的情况。

可从菜鸟教程 Swift 目录按以上主题阅读。除 readLine() 用到的最基本写法外,无需深入可选类型,也无需学习结构体、类、闭包、泛型或 SwiftUI。遇到教程样例与所用版本不一致,可参考下列 Swift 官方说明或询问授课干部。

可以用循环判断,也可以使用自己理解的标准库方法。不以代码行数、运行速度排名或使用高级语法的数量评判本题。

独立完成规则

允许用 AI 辅助学习基础知识。 例如,询问 let 和 var 的区别、函数参数标签的含义,或请 AI 讲解教程中看不懂的语法和通用示例。理解之后,本题的思路、代码与检查过程由自己完成。

不得用 AI 完成本题。 包括分析题目并给出解题思路或伪代码,生成、补全、修改或优化本题代码,以及检查、解释或调试待提交的代码。不要把本题题面、自己的解法、源码或报错交给 AI 分析;运行证据也必须由自己实际运行获得。

可以阅读教程和官方文档,使用编辑器的非 AI 语法提示,向干部询问环境问题或基础概念;不能让他人代写。按工作室规定,不得向干部或其他成员询问本题解法。

请亲自运行,比较预期与实际结果,必要时自己定位问题、修改后重试。不要求必须遇到或制造某个错误。

考察重点

完成后,可以用下面的问题检查自己是否真正理解:

  • 变量与数据:哪些数据会改变?为什么需要区分 let 和 var?数组怎样表示一份清单?
  • 条件与循环:自己用到的判断和遍历在做什么?为什么能找出缺少的物品,并保留原清单的顺序?若用了标准库方法,能否说明它的作用?
  • 函数与调用:参数和返回值分别是什么?返回结果与打印结果有什么区别?换一组输入,函数为什么还能工作?
  • 输入与更新:readLine() 读到的内容怎样进入数组?它的返回值为什么需要先处理“可能没有内容”?输入为空、重复或不在清单里时,程序怎样处理?
  • 边界情形:包为空、需要清单为空、全部带齐时分别会发生什么?为什么“全部带齐”和“本次无需检查”要区分?
  • 运行与检查:能否运行自己的源码、对照案例检查输出;修改数据后,能否先预测结果,再运行验证?发现不一致时,能否说明自己的检查过程?

二面会结合源码与真实运行结果交流上述内容,可能请你解释一段代码,或预测输入变化后的输出。重点是基础知识与本人完成过程,不以代码行数、装饰性排版或高级语法数量判断能力。