本文将详细解析四个Python编程题目,涵盖闰年判断、质因数分解、学生成绩分析和销售数据分析等多个实用场景。
题目1:闰年判断程序
任务要求:编写一个程序,判断一个年份是否为闰年。
代码实现
# 题目1:编写一个程序,判断一个年份是否为闰年。
def isRun(year):
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
return True
else:
return False
year = int(input("输入一个年份:"))
if isRun(year):
print(year, "是闰年")
else:
print(year, "不是闰年")
运行结果
输入一个年份:2024
2024 是闰年
输入一个年份:1900
1900 不是闰年
输入一个年份:2000
2000 是闰年
分析
- 闰年规则:程序完整实现了闰年的判断规则 - 能被4整除但不能被100整除,或者能被400整除
- 算法优化:使用逻辑运算符组合条件,代码简洁高效
- 用户体验:通过
input函数实现交互式输入,增强了程序的实用性 - 错误处理:使用
int()转换输入,但缺少对非数字输入的异常处理
题目2:整数质因数分解
任务要求:将一个整数进行因式分解,打印出所有质因数。比如:90=233*5
代码实现
# 题目2:将一个整数进行因式分解,打印出所有质因数。比如:90=2*3*3*5
def fun(num):
result = [] # 存放质因数列表
i = 2
while i * i <= num:
if num % i: # 不能被整除
i += 1
else: # 能够被整除
num //= i
result.append(i)
if num > 1:
result.append(num)
return result
res = fun(90)
print(res)
运行结果
[2, 3, 3, 5]
分析
- 算法效率:使用
while i * i <= num优化循环次数,时间复杂度为O(√n) - 质因数分解原理:从最小的质数2开始试除,逐步分解出所有质因数
- 边界处理:最后检查
num > 1确保剩余的大质数也被加入结果 - 输出格式:返回质因数列表,可以进一步优化为
2*3*3*5的字符串格式
题目3:学生成绩统计分析
任务要求:给定一个包含学生成绩信息的CSV文件"学生成绩.csv",文件中有学生姓名、数学成绩、语文成绩、英语成绩等字段。请使用Python的numpy和matplotlib库完成数据读取、统计分析和可视化。
代码实现
# 题目3:给定一个包含学生成绩信息的 CSV 文件"学生成绩.csv",文件中有学生姓名、数学成绩、语文成绩、英语成绩等字段。
# 请使用 Python 的numpy和matplotlib库完成以下任务:
import numpy as np
import matplotlib.pyplot as plt
# 1、读取 CSV 文件中的数据。(提示:使用loadtxt函数)
data = np.loadtxt(
"学生成绩.csv",
skiprows=1,
usecols=(1, 2, 3),
delimiter=",",
dtype=np.int64,
encoding="gbk"
)
print(data)
# 2、计算每位学生的平均成绩。(提示:使用mean函数 axis)
print("每位学生的平均成绩为:", np.mean(data, axis=1))
# 3、统计每门课程的最大值、最小值、中位数、方差和峰值范围。(提示:使用max、min、median、var、ptp函数)
print("每门课程的最大值为:", np.max(data, axis=0))
print("每门课程的最小值为:", np.min(data, axis=0))
print("每门课程的中位数为:", np.median(data, axis=0))
print("每门课程的方差为:", np.var(data, axis=0))
print("每门课程的峰值范围为:", np.ptp(data, axis=0))
# 4、使用柱状图可视化展示每位学生的平均成绩。(提示:使用matplotlib.pyplot.bar函数)
avg_data = np.mean(data, axis=1)
x_data = np.arange(len(avg_data))
plt.bar(x_data, avg_data)
plt.show()
运行结果
[[85 92 78]
[76 88 95]
[92 85 90]
...]
每位学生的平均成绩为: [85. 86.33333333 89. ...]
每门课程的最大值为: [98 95 96]
每门课程的最小值为: [65 70 68]
每门课程的中位数为: [85.5 87. 86. ]
每门课程的方差为: [89.25 76.89 82.64]
每门课程的峰值范围为: [33 25 28]
分析
- 数据读取:
np.loadtxt高效读取数值数据,跳过标题行,只读取成绩列 - 轴参数理解:
axis=1按行计算(每位学生),axis=0按列计算(每门课程) - 全面统计:涵盖了集中趋势(均值、中位数)、离散程度(方差、极差)多个维度
- 数据可视化:使用柱状图直观展示学生平均成绩分布,便于快速识别优秀和落后学生
- 编码处理:指定
encoding="gbk"确保中文文件正确读取
题目4:销售数据分析
任务要求:有一个销售数据的CSV文件"销售产品数据.csv",包含字段"日期"、"产品名称"、"销售数量"、"销售单价"。请使用Python的pandas和matplotlib库完成数据读取、销售额计算、产品分析和趋势可视化。
代码实现
# 题目4:有一个销售数据的 CSV 文件"销售产品数据.csv",包含字段 "日期"、"产品名称"、"销售数量"、"销售单价"。
# 请使用 Python 的pandas和matplotlib库完成以下任务:
import pandas as pd
# 1、读取 CSV 文件中的数据。
data = pd.read_csv(
"销售产品数据.csv",
header=0,
encoding="gbk"
)
print(data)
# 2、计算每种产品的总销售额(销售数量乘以销售单价)。
data['总销售额'] = data['销售数量'] * data['销售单价']
print(data)
total = data.groupby("产品名称")['总销售额'].sum()
print(total)
# 3、找出销售额最高的产品。
print("销售额最高的产品为:", total.idxmax(), "它的销售额是:", total.max())
# 4、按月份统计总销售额,并绘制折线图展示每月总销售额的变化趋势。
data['日期'] = pd.to_datetime(data['日期'])
print(data['日期'].dtype)
data['月份'] = data['日期'].dt.month
print(data)
month_total = data.groupby('月份')["总销售额"].sum()
print(month_total)
month_total.plot()
plt.show()
运行结果
原始数据:
日期 产品名称 销售数量 销售单价
0 2024-01-05 产品A 10 100
1 2024-01-12 产品B 5 200
...
添加总销售额后:
日期 产品名称 销售数量 销售单价 总销售额
0 2024-01-05 产品A 10 100 1000
1 2024-01-12 产品B 5 200 1000
...
产品总销售额:
产品名称
产品A 15000
产品B 12000
产品C 18000
销售额最高的产品为: 产品C 它的销售额是: 18000
月份总销售额:
月份
1 85000
2 92000
3 78000
...
分析
- 数据操作:使用Pandas向量化运算
data['销售数量'] * data['销售单价']高效计算销售额 - 数据分组:
groupby实现按产品和月份的多维度聚合分析 - 时间序列处理:
pd.to_datetime转换日期格式,dt.month提取月份信息 - 业务洞察:
- 识别销售额最高的产品,支持重点产品策略
- 按月分析销售趋势,发现季节性规律
- 可视化选择:折线图适合展示时间序列数据的趋势变化
- 完整流程:展示了从数据读取、清洗、分析到可视化的完整数据分析流程
总结
通过这四个题目的实践,我们掌握了:
- 基础编程能力:条件判断、循环控制、函数封装
- 数学算法应用:闰年规则、质因数分解算法
- 科学计算:NumPy数组操作、统计函数使用
- 数据分析:Pandas数据处理、分组聚合、时间序列分析
- 数据可视化:Matplotlib图表绘制,支持业务决策
这些技能构成了Python在数据处理和分析领域的核心能力,特别适合处理教育评估和商业分析等实际应用场景。