登录后可在本页提交。各题的代码和输入输出填写在文本框中。第 4 题无需上传图片,运行输出中写明图片文件名即可。
一、作业内容
1. 购物清单管理
用列表保存购物清单,练习添加、插入、删除、修改与排序。程序开始时购物清单为空列表。按下列顺序操作,每完成一步即打印当前清单。
- 依次在末尾添加
"苹果"、"牛奶"、"面包",打印清单。输出为['苹果', '牛奶', '面包']。 - 在索引
1处插入"鸡蛋",打印清单。输出为['苹果', '鸡蛋', '牛奶', '面包']。 - 按值删除
"牛奶",打印清单。输出为['苹果', '鸡蛋', '面包']。 - 用
pop(1)删除索引1处的元素,先打印被删除的元素,再打印清单。输出依次为鸡蛋与['苹果', '面包']。 - 把索引
0处的元素改为"红苹果",打印清单。输出为['红苹果', '面包']。 - 用
extend()追加["酸奶", "香蕉"],打印清单及其长度。输出依次为['红苹果', '面包', '酸奶', '香蕉']与4。 - 按默认顺序排序,打印清单。输出为
['红苹果', '酸奶', '面包', '香蕉']。 - 再按倒序排序,打印清单。输出为
['香蕉', '面包', '酸奶', '红苹果']。
- 第 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题 鸢尾花回归 | 四题齐 |
|---|