# computer-science-introduction **Repository Path**: gethug/computer-science-introduction ## Basic Information - **Project Name**: computer-science-introduction - **Description**: "计算科学导论与计算思维"实验课教学内容 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-27 - **Last Updated**: 2026-09-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 《计算科学导论与计算思维》实验教学大纲 ## 一、课程基本信息 | 项目 | 内容 | | --- | --- | | 课程名称 | 计算科学导论与计算思维 | | 适用对象 | 计算机科学专业一年级本科生 | | 开课学期 | 2026—2027学年第一学期(第5周—第16周) | | 实验学时 | 24 学时(每周 2 学时 × 12 周) | | 实验环境 | Python 3.x、PyCharm(统一版,非商业用途免费)、MySQL 8.x、mysql-connector-python | | 主要参考资料 | 课程实验 PPT(见 `PPT/` 目录,共 20 讲) | ## 二、实验教学目标 本实验课程是《计算科学导论与计算思维》的实践环节,以 Python 语言为载体,通过循序渐进的编程训练达成以下目标: 1. **建立计算思维**:在编程实践中体会抽象、分解、模式识别与自动化等计算思维核心方法,初步形成用计算机求解问题的意识; 2. **掌握编程基础**:熟练搭建 Python 开发环境,掌握 Python 基本语法、控制结构、六种内置数据类型、函数与模块的使用; 3. **理解面向对象**:理解类与对象、封装、构造函数与继承等面向对象基本概念,能够进行简单的面向对象程序设计; 4. **具备工程素养**:掌握异常处理的基本方法,了解 Python 操作数据库的基本流程,具备程序调试、规范书写实验文档的习惯,为后续《程序设计》《数据结构》等课程奠定基础。 ## 三、实验项目总表 | 周次 | 实验编号 | 实验名称 | 学时 | 实验类型 | 对应教学内容(PPT) | | --- | --- | --- | --- | --- | --- | | 第5周 | 实验一 | Python 开发环境搭建与基本语法 | 2 | 验证型 | 3.1&3.2节、3.3.1节 | | 第6周 | 实验二 | 数据类型、类型转换与运算符 | 2 | 验证型 | 3.3.2节、3.3.3节 | | 第7周 | 实验三 | 条件语句程序设计 | 2 | 设计型 | 3.3.2节(1) | | 第8周 | 实验四 | 循环语句与循环控制 | 2 | 设计型 | 3.3.2节(2)(3) | | 第9周 | 实验五 | 字符串处理 | 2 | 设计型 | 3.3.4节 | | 第10周 | 实验六 | 列表与元组 | 2 | 设计型 | 3.3.5节、3.3.6节 | | 第11周 | 实验七 | 字典与集合 | 2 | 设计型 | 3.3.7节、3.3.8节 | | 第12周 | 实验八 | 函数与模块 | 2 | 设计型 | 3.3.9节、3.3.10节 | | 第13周 | 实验九 | 类、对象与封装 | 2 | 设计型 | 3.3.11节、3.3.12节 | | 第14周 | 实验十 | 构造函数与继承 | 2 | 设计型 | 3.3.13节、3.3.14节 | | 第15周 | 实验十一 | 错误和异常处理 | 2 | 设计型 | 3.3.15节 | | 第16周 | 实验十二 | 综合实验:Python 操作 MySQL | 2 | 综合型 | 3.3.16节 | ## 四、各实验项目教学内容 ### 实验一 Python 开发环境搭建与基本语法(第5周,2学时) **实验目的** 1. 了解 Python 语言的特点与发展历史,理解解释型、交互式、面向对象的含义; 2. 掌握 Python 解释器与 PyCharm Community 的安装与配置; 3. 掌握在 PyCharm 中创建项目、新建并运行 `.py` 文件的方法; 4. 掌握 Python 注释、缩进(4空格)等基本语法规范。 **实验内容** 1. 安装 Python 3.x 与 PyCharm Community,创建第一个 Python 项目; 2. 分别以交互式(`>>>` 提示符)与脚本式两种方式运行代码,体会二者区别; 3. 编写第一个程序:输出 `Hello, World!` 及多行自我介绍(姓名、学院、爱好); 4. 练习单行注释(`#`)与多行注释的写法;故意制造缩进错误、缺少冒号等语法错误,观察并记录解释器的报错信息; 5. 使用 `input()` 接收键盘输入并原样/格式化输出。 **实验产出**:`hello.py`(含自我介绍与输入输出练习)。 --- ### 实验二 数据类型、类型转换与运算符(第6周,2学时) **实验目的** 1. 掌握 int、float、complex 等 Number 类型及 del 语句的使用; 2. 掌握 `int()`、`float()`、`str()`、`eval()`、`chr()`、`ord()` 等类型转换函数; 3. 掌握算术、比较、赋值、逻辑、位、成员运算符及进制转换; 4. 掌握 math 模块与随机数函数的使用。 **实验内容** 1. 验证各类型转换函数的行为,重点观察 `int("3.5")`、`int("abc")` 等转换失败的例子; 2. 拆数练习:输入一个三位整数,用 `%` 与 `//` 分别求其个、十、百位并逆序输出; 3. 温度转换:输入摄氏温度,输出对应华氏温度(`F = C × 9/5 + 32`),结果保留两位小数; 4. 使用 math 模块计算圆的面积与周长(`math.pi`);用位运算实现整数二进制特征的观察,练习 `bin()`/`oct()`/`hex()` 进制转换; 5. 使用 random 模块生成随机数(随机整数、随机小数、随机选取、打乱序列)。 **实验产出**:`number.py`、`operators.py`。 --- ### 实验三 条件语句程序设计(第7周,2学时) **实验目的** 1. 掌握 if、if-else、if-elif-else 多分支结构的语法与执行流程; 2. 掌握用 `and`、`or`、`in` 组合多个判断条件; 3. 掌握 if 语句的嵌套。 **实验内容** 1. 成绩等级判定:输入百分制成绩,输出"优秀 / 良好 / 中等 / 及格 / 不及格",注意非法成绩(<0 或 >100)的处理; 2. 闰年判断:输入年份,依据"四年一闰、百年不闰、四百年再闰"规则输出结果; 3. 三个数排序:输入三个整数,按从小到大输出; 4. 出租车计费 / 快递计重收费:根据分段条件用嵌套 if 或 elif 实现分段计价; 5. 简易菜单:结合 `in` 判断用户输入是否为合法选项。 **实验产出**:`score.py`、`leap_year.py` 等。 --- ### 实验四 循环语句与循环控制(第8周,2学时) **实验目的** 1. 掌握 while 循环与 for 循环的语法及适用场景,掌握 `range()` 函数; 2. 掌握循环嵌套的执行过程; 3. 掌握 break、continue、pass 语句的作用与区别。 **实验内容** 1. 分别用 while 与 for 求 1~100 的累加和,以及 1~100 中所有偶数之和; 2. 九九乘法表:用嵌套循环按标准格式输出(练习 `print(..., end="")`); 3. 素数判断:输入一个整数,判断其是否为素数;进阶:输出 100 以内的全部素数; 4. 猜数字游戏:程序随机生成 1~100 的整数,用户循环猜数,程序提示"大了/小了",猜中或超过 7 次后用 break 退出; 5. 登录验证:模拟输入密码,最多允许尝试 3 次(while + 计数 + break); 6. 分别观察 continue 与 pass 对循环执行的影响(如输出 1~10 中的奇数)。 **实验产出**:`loops.py`、`guess_number.py`、`login.py`。 --- ### 实验五 字符串处理(第9周,2学时) **实验目的** 1. 掌握字符串的创建、索引访问与切片操作; 2. 掌握转义字符与字符串运算符(`+`、`*`、`in`、`r/R` 原始字符串); 3. 掌握 f-string 等格式化输出方法; 4. 掌握常用字符串内建函数(`len`、`upper/lower`、`strip`、`split`、`join`、`replace`、`find`、`count` 等)。 **实验内容** 1. 字符串切片练习:输入一句话,输出其逆序、前 5 个字符、后 5 个字符; 2. 回文判断:判断输入的字符串是否为回文(如"上海自来水来自海上"); 3. 字符统计:统计字符串中字母、数字、空格及其他字符的个数; 4. 敏感词过滤:给定敏感词列表,用 `replace()` 将句子中的敏感词替换为 `*`; 5. 姓名格式化:将"zhang san"规范为"Zhang San"(split + capitalize + join); 6. 进阶:结合 `ord()`/`chr()` 实现凯撒密码加密与解密。 **实验产出**:`string_ops.py`、`caesar.py`。 --- ### 实验六 列表与元组(第10周,2学时) **实验目的** 1. 掌握列表的创建、索引、切片、更新与删除; 2. 掌握 `append`、`insert`、`remove`、`pop`、`sort`、`reverse`、`count`、`index` 等列表方法; 3. 理解元组不可变的特性及其与列表的相互转换。 **实验内容** 1. 成绩管理:循环录入若干名学生成绩存入列表,输出最高分、最低分、平均分,并统计高于平均分的人数(`max`/`min`/`sum`/`len`); 2. 手写冒泡排序或选择排序,将列表升序排列(不得直接调用 `sort()`),再验证与 `sort()` 结果一致; 3. 列表去重:去除列表中的重复元素并保持原有顺序(进阶:对比用 set 去重为何会乱序); 4. 嵌套列表:用二维列表存储 3 名学生 × 3 门课的成绩矩阵,计算每人平均分与每门课最高分; 5. 元组练习:创建元组并尝试修改元素,观察并记录报错;用 `tuple()`/`list()` 实现互转;元组解包赋值。 **实验产出**:`list_lab.py`、`tuple_lab.py`。 --- ### 实验七 字典与集合(第11周,2学时) **实验目的** 1. 掌握字典的创建及键值对的增、删、改、查与遍历(`keys`/`values`/`items`); 2. 理解键唯一且必须不可变、值可任意取类型的约束; 3. 掌握集合的无序不重复特性及交、并、差运算。 **实验内容** 1. 通讯录:用字典实现"增、删、改、查、显示全部"的命令行通讯录(while + 菜单 + 字典),录入联系人姓名与电话; 2. 词频统计:输入一段英文,统计每个单词出现的次数并按次数降序输出前 5 名(字典经典应用); 3. 集合运算:给定两个班级选课名单列表,利用集合求两门课都选了的、只选了一门的、选过任意一门的学生(交、差、并); 4. 集合去重:用 `set()` 对列表去重,再用 `sorted()` 排序输出; 5. 综合小练习:用字典 + 列表存储多名学生的多门课成绩,实现按姓名查询、按科目统计。 **实验产出**:`contacts.py`、`word_freq.py`、`set_lab.py`。 --- ### 实验八 函数与模块(第12周,2学时) **实验目的** 1. 掌握函数的定义(`def`)、调用与返回值(`return`); 2. 掌握默认参数、关键字参数与不定长参数(`*args`)的使用; 3. 理解局部变量与全局变量的作用域概念; 4. 掌握模块的导入方式(`import`、`from ... import`、`as` 别名)及自定义模块。 **实验内容** 1. 基础函数:编写 `is_prime(n)`、`max3(a, b, c)`、`c2f(celsius)` 等函数并调用测试; 2. 参数练习:实现带默认参数的 `greet(name, greeting="你好")`,以及可接收任意个数字的 `my_sum(*args)`; 3. 作用域观察:在函数内外同名变量分别赋值,用 `global` 关键字前后对比输出结果; 4. **代码重构**:将实验六的成绩管理、实验七的词频统计改写为函数,主程序只负责调用(体会"函数提高代码复用"); 5. 自定义模块:将常用函数保存为 `myutils.py`,在 `main.py` 中分别用三种方式导入并调用;观察 `__name__` 的取值,理解 `if __name__ == "__main__":` 的作用; 6. 标准库使用:用 `sys` 模块查看 `sys.path`,理解模块搜索路径。 **实验产出**:`myutils.py`、`main.py`。 --- ### 实验九 类、对象与封装(第13周,2学时) **实验目的** 1. 理解面向对象与面向过程的区别,理解类与对象的关系(类是模板,对象是实例); 2. 掌握类的定义、实例化、属性与方法的书写,理解 `self` 的含义; 3. 理解封装的概念,掌握双下划线 `__` 私有属性及通过公有方法(getter/setter)访问的封装方式。 **实验内容** 1. 定义 `Dog` 类(属性:名字、品种;方法:叫、吃东西),创建两个实例并调用方法; 2. 观察 `self`:在方法中打印 `self`,与实例对象的内存地址(`id()`)对比,理解 self 代表实例本身; 3. 封装练习:定义 `Student` 类,将姓名、成绩设为私有属性 `__name`、`__score`,在类外直接访问观察报错;提供 `set_score()`(校验 0~100,非法抛出提示)与 `get_score()` 公有方法; 4. 编写 `introduce()` 方法输出学生自我介绍; 5. 进阶:尝试在子类中访问父类私有属性,体会双下划线避免被子类覆盖的设计意图。 **实验产出**:`dog.py`、`student.py`。 --- ### 实验十 构造函数与继承(第14周,2学时) **实验目的** 1. 掌握构造函数 `__init__()` 的作用与执行时机,掌握无参与有参构造函数的编写; 2. 理解成员变量在构造函数中的初始化方式; 3. 掌握类的继承语法,理解代码复用;掌握方法重写与 `super()` 函数; 4. 了解 Python 的多继承。 **实验内容** 1. 为实验九的 `Student` 类补充有参构造函数,实现"创建即初始化"姓名与成绩;练习不定长参数的构造函数; 2. 继承体系:定义 `Person` 类(姓名、年龄),派生 `Student` 类(增加学号、成绩)与 `Teacher` 类(增加工号、课程); 3. 方法重写:子类重写 `introduce()`,输出各自完整信息; 4. `super()` 练习:子类构造函数中先用 `super().__init__()` 完成父类属性初始化,再初始化子类特有属性; 5. 多继承示例:定义 `Speaker`、`Student` 类,让 `SpeakerStudent` 同时继承二者并观察方法解析顺序; 6. 进阶:为 `Student` 实现 `__str__()` 方法,使 `print(对象)` 直接输出友好信息。 **实验产出**:`person.py`(含 Student、Teacher 及测试代码)。 --- ### 实验十一 错误和异常处理(第15周,2学时) **实验目的** 1. 区分语法错误与异常,能读懂常见异常信息(`ValueError`、`TypeError`、`ZeroDivisionError`、`IndexError`、`KeyError` 等); 2. 掌握 `try/except` 捕获异常、多 except 分支、`else` 与 `finally` 子句; 3. 掌握用 `raise` 主动抛出异常;理解用 `Exception` 捕获所有异常的写法及风险。 **实验内容** 1. 异常观察:故意编写除零、列表越界、字典键不存在、字符串转数字失败等程序,记录各类异常的名称与信息; 2. 健壮的输入:用 while + try/except 改写"输入成绩"程序——输入非数字不崩溃而是提示重输,直到合法为止; 3. 多分支处理:一段代码中分别捕获 `ValueError` 与 `ZeroDivisionError` 并给出不同提示;练习 `except (A, B)` 写法、`else`(无异常时执行)与 `finally`(无论如何都执行,如"感谢使用"); 4. raise 练习:模拟银行取款,余额不足时 `raise ValueError("余额不足")`,调用方捕获后打印友好提示; 5. 综合改造:为实验七的通讯录加入异常处理(查询不存在的人名、删除空通讯录等场景)。 **实验产出**:`exception_lab.py`、改造后的 `contacts.py`。 --- ### 实验十二 综合实验:Python 操作 MySQL(第16周,2学时) > **课前任务**(第15周布置):安装 MySQL 8.x,完成 root 密码设置并验证可登录;执行 `pip install mysql-connector-python`。 **实验目的** 1. 掌握 mysql-connector 驱动的安装与数据库连接的建立; 2. 掌握用 Python 执行 SQL 完成建库、建表与增、删、改、查(CRUD)操作; 3. 掌握 `execute()` 参数化查询(`%s` 占位符)防止 SQL 注入的方法; 4. 综合运用本学期所学的数据类型、控制结构、函数、面向对象与异常处理知识,完成一个数据持久化的小型信息管理系统。 **实验内容** 1. 连接数据库,创建数据库 `school` 与数据表 `student`(学号、姓名、年龄、成绩); 2. 插入数据:单条 `insert into` 与 `executemany()` 批量插入;用 `lastrowid` 获取自增 ID; 3. 查询数据:全表查询、`fetchone()`/`fetchall()`、where 条件查询、`like` 模糊查询、`order by` 排序与 `limit` 分页; 4. 更新与删除:带 where 条件的 `update`/`delete`,体会遗漏 where 条件的后果并养成先查询再删除的习惯; 5. SQL 注入演示:对比字符串拼接 SQL 与 `%s` 参数化查询在输入 `' or '1'='1` 时的行为差异; 6. **综合任务**:将实验七的命令行通讯录(或学生成绩管理)升级为"MySQL 持久化版"——用类封装数据库操作,菜单循环 + 异常处理,程序重启后数据不丢失。 **实验产出**:`mysql_lab.py`、综合项目 `student_manager.py`(作为期末考核依据)。 ## 五、考核方式与成绩评定 | 考核项 | 比例 | 说明 | | --- | --- | --- | | 考勤与课堂表现 | 20% | 出勤情况、课堂纪律与随堂问答 | | 平时实验(实验一~实验十一) | 50% | 每次实验的代码完成度与实验报告质量 | | 期末综合实验(实验十二) | 30% | 综合项目的功能完整性、代码规范性 | **实验报告要求**(每次实验课后提交): 1. 实验报告包含:实验目的、实验内容、关键代码、运行结果截图、遇到的问题及解决方法(心得); 2. 提交物统一命名:`W<周次>-<学号>-<姓名>.zip`(如 `W07-2026304010123-张三.zip`),内含源代码文件与实验报告; 3. 严禁抄袭,发现雷同报告双方均按不及格处理;鼓励在完成基础上做"进阶"内容。 ## 六、教学资源与目录组织 - 实验指导 PPT 位于 `PPT/` 目录,按章节命名,实验进度与上表"对应教学内容"一致; - 本仓库按周建立目录存放每周实验材料(实验指导书、起始代码、参考答案): ``` computer-science-introduction/ ├── PPT/ # 实验教学 PPT(20讲) ├── W05/ # 第5周:实验一 材料 ├── W06/ # 第6周:实验二 材料 │ └── ... ├── W16/ # 第16周:实验十二(综合实验)材料 └── README.md ```