作业八

购物清单、考试成绩、一周气温与鸢尾花线性回归

登录后可在本页提交。各题的代码和输入输出填写在文本框中。第 4 题无需上传图片,运行输出中写明图片文件名即可。

一、作业内容

学生范围:人工智能专业 2026级本科 截止时间:2026年11月16日 18:00

1. 购物清单管理

用列表保存购物清单,练习添加、插入、删除、修改与排序。程序开始时购物清单为空列表。按下列顺序操作,每完成一步即打印当前清单。

  1. 依次在末尾添加 "苹果"、"牛奶"、"面包",打印清单。输出为 ['苹果', '牛奶', '面包']。
  2. 在索引 1 处插入 "鸡蛋",打印清单。输出为 ['苹果', '鸡蛋', '牛奶', '面包']。
  3. 按值删除 "牛奶",打印清单。输出为 ['苹果', '鸡蛋', '面包']。
  4. 用 pop(1) 删除索引 1 处的元素,先打印被删除的元素,再打印清单。输出依次为 鸡蛋 与 ['苹果', '面包']。
  5. 把索引 0 处的元素改为 "红苹果",打印清单。输出为 ['红苹果', '面包']。
  6. 用 extend() 追加 ["酸奶", "香蕉"],打印清单及其长度。输出依次为 ['红苹果', '面包', '酸奶', '香蕉'] 与 4。
  7. 按默认顺序排序,打印清单。输出为 ['红苹果', '酸奶', '面包', '香蕉']。
  8. 再按倒序排序,打印清单。输出为 ['香蕉', '面包', '酸奶', '红苹果']。
  • 第 3、4 步各用一种删除方法,并在注释中写明 remove() 与 pop() 在参数和返回值上的区别。
  • 第 7、8 步各调用一次 sort(),第 8 步不得重建列表。
  • 每行输出前加一行说明文字,写明这是第几步、做了什么操作。

sort() 对字符串按字符的 Unicode 码点比较,「红」(U+7EA2) < 「酸」(U+9178) < 「面」(U+9762) < 「香」(U+9999),因此第 7 步的顺序由码点决定。若需按拼音排序,可给 sort() 传入 key 参数,本题不要求。第 7、8 步的结果依赖前面各步:若前面某步的输出与预期不符,这两步也会随之不同。

2. 考试成绩分析

给定下列成绩与姓名列表,完成统计与排名。两个列表按下标一一对应。

scores = [72, 88, 95, 64, 81, 90, 77]
names = ["陈思远", "林雨欣", "周子涵", "孙嘉怡", "黄俊杰", "吴雅雯", "徐浩然"]
  • 打印人数、最高分、最低分、总分与平均分。输出依次为 人数:7、最高分:95、最低分:64、总分:567、平均分:81.0(平均分保留 1 位小数)。统计量使用 len()、max()、min()、sum() 计算。
  • 用 sorted() 打印升序排列的成绩,输出为 [64, 72, 77, 81, 88, 90, 95];紧接着打印原列表 scores,并在输出中说明 sorted() 之后原列表是否改变。原列表的打印结果为 [72, 88, 95, 64, 81, 90, 77]。
  • 用 sorted() 与切片打印前三高的分数,输出为 [95, 90, 88]。
  • 用 enumerate() 按列表原顺序打印序号,格式为「序号1:陈思远,72分」,第 1 至第 3 行依次为 序号1:陈思远,72分、序号2:林雨欣,88分、序号3:周子涵,95分。
  • 用 zip() 并行遍历,用列表推导式输出成绩不低于 85 的姓名,输出为 ['林雨欣', '周子涵', '吴雅雯']。
  • 用 zip() 找出成绩最高的人,按其姓名输出,输出为 周子涵。
  • 在代码注释或输出中说明 sorted() 与 sort() 的区别,并说明本题第 2 项为何只能选用 sorted()。

3. 一周气温分析

给定一周七天的最高气温(单位:摄氏度),用列表推导式完成换算、筛选与分级。

celsius = [22, 28, 31, 26, 29, 33, 24]
  • 用列表推导式把每天气温换算为华氏温度,按「华氏 = 摄氏 × 9 / 5 + 32」计算,保留 1 位小数。输出为 [71.6, 82.4, 87.8, 78.8, 84.2, 91.4, 75.2]。
  • 计算一周平均气温,保留 1 位小数。输出为 平均气温:27.6。
  • 用带 if 的列表推导式筛选高于平均气温的各天气温,输出为 [28, 31, 29, 33];并打印这样的天数,输出为 高于平均气温的天数:4。
  • 用条件表达式生成新列表:气温达到 30 度的保持原值,其余记为 0,输出为 [0, 0, 31, 0, 0, 33, 0]。
  • 用条件表达式生成等级列表:30 度及以上为 "炎热",25 度及以上且不足 30 度为 "舒适",其余为 "凉爽"。输出为 ['凉爽', '舒适', '炎热', '舒适', '舒适', '炎热', '凉爽']。
  • 上述五项结果均须由列表推导式或条件表达式生成。
  • 换算与筛选所使用的原始列表 celsius 全程保持不变,并在输出末尾打印一次 celsius。

4. 鸢尾花线性回归

使用 scikit-learn 自带的鸢尾花数据集(Iris),完成一次完整的线性回归建模、评估与预测。

  • 安装库:pip install scikit-learn matplotlib。
  • 用 from sklearn.datasets import load_iris 加载数据。先阅读 DESCR,弄清样本数、4 个特征的含义与类别数,再开始写代码。
  • 打印样本数、特征名称(feature_names)与类别名称(target_names)。
  • 用 matplotlib 画出「花瓣长度–花瓣宽度」散点图,三个类别各用一种颜色并附图例,坐标轴加名称。
  • 以花瓣长度为自变量 x、花瓣宽度为因变量 y,用 LinearRegression 拟合回归直线,输出回归方程(斜率与截距保留 3 位小数)与决定系数 R²(保留 3 位小数)。本项使用全部 150 个样本拟合,不划分训练集与测试集。所得 R² 为拟合优度,与选做中划分数据后得到的测试集 R² 不是同一口径。
  • 在散点图上叠加回归直线,保存为 iris_regression.png,并在输出中打印该文件名。本题无需上传图片。
  • 用模型预测花瓣长度为 5.5 cm 时的花瓣宽度,打印预测值。
  • 代码结构清晰,含必要注释。

若坐标轴使用中文标签而出现方块乱码,可设置 plt.rcParams['font.sans-serif'](Windows 用 SimHei,macOS 用 Arial Unicode MS)与 plt.rcParams['axes.unicode_minus'] = False;也可直接使用英文标签。

输出示例(数字以实际运行结果为准):

=== 鸢尾花线性回归 ===
样本数:150
特征:['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
类别:['setosa' 'versicolor' 'virginica']

回归方程:petal width = 0.416 * petal length - 0.363
R²:0.927
图片已保存:iris_regression.png
预测:花瓣长度 5.5 cm 时,花瓣宽度约为 1.92 cm

选做:

  • 三分类:用 4 个特征与 train_test_split(test_size=0.3,random_state=42)划分数据,用 LogisticRegression 或 KNeighborsClassifier 训练,输出测试集准确率与混淆矩阵。
  • 稳定性检验:把 random_state 换成 5 个不同值重复实验,报告测试集准确率的波动范围,并用一两句话解释波动原因。
  • 多特征回归:把 4 个特征全部作为自变量,用 train_test_split 划分训练集与测试集,分别报告训练集与测试集的 R²,并说明二者的差别说明什么。

二、提交作业

在线提交

登录后在本页提交。各题的代码和输入输出填写在文本框中。第 4 题无需上传图片,运行输出中写明图片文件名即可。

三、当前提交情况

正在读取名单与完成情况。

作业八按四题统计:购物清单管理、考试成绩分析、一周气温分析、鸢尾花线性回归。

名单人数
—
已提交
—
未提交
—
统计口径
按人合并

按班级统计

班级 名单人数 已提交 未提交 提交比例
班级学号姓名第1题 购物清单第2题 考试成绩第3题 一周气温第4题 鸢尾花回归四题齐