Python 练习题<4>

59 阅读4分钟

案例一: 编写一个程序,判断一个年份是否为闰年。

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,"不是闰年")

案例二: 将一个整数进行因式分解,打印出所有质因数。比如:90=233*5

def fun(num):
    res = []
    i = 2
    while i ** 2 <= num:
        if num % i != 0:
            i += 1
        else:
            num //= i
            res.append(i)
    if num != 1:
        res.append(num)
    return  res
# 测试用例
num = int(input("请输入一个整数:"))
res = fun(num)
print(res)

案例三: 给定一个包含学生成绩信息的 CSV 文件“学生成绩.csv”,文件中有学生姓名、数学成绩、语文成绩、英语

请使用 Python 的numpy和matplotlib库完成以下任务:

  1. 读取 CSV 文件中的数据。(提示:使用loadtxt函数)
  2. 计算每位学生的平均成绩。(提示:使用mean函数 axis)
  3. 统计每门课程的最大值、最小值、中位数、方差和峰值范围。(提示:使用max、min、median、var、ptp函数)
  4. 使用柱状图可视化展示每位学生的平均成绩。(提示:使用matplotlib.pyplot.bar函数)
分解:
  1. 读取 CSV 文件中的数据。(提示:使用loadtxt函数)
import numpy as np
import matplotlib.pyplot as plt
data = np.loadtxt(
    "学生成绩.csv",
    skiprows=1,
    usecols=(1,2,3),
    delimiter=",",
    encoding="gbk",
    dtype=np.int64
)
print(data)
  1. 计算每位学生的平均成绩。(提示:使用mean函数 axis)
print("每位学生的平均成绩:\n",np.mean(data, axis=1))
  1. 统计每门课程的最大值、最小值、中位数、方差和峰值范围。(提示:使用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))
  1. 使用柱状图可视化展示每位学生的平均成绩。(提示:使用matplotlib.pyplot.bar函数)
avg = np.mean(data, axis=1)
x = np.arange(1, avg.size + 1)
plt.bar(x, avg)
plt.show()
完整:
# 1、读取 CSV 文件中的数据。(提示:使用loadtxt函数)
import numpy as np
import matplotlib.pyplot as plt
data = np.loadtxt(
    "学生成绩.csv",
    skiprows=1,
    usecols=(1,2,3),
    delimiter=",",
    encoding="gbk",
    dtype=np.int64
)
print(data)
# 2、计算每位学生的平均成绩。(提示:使用mean函数 axis)
print("每位学生的平均成绩:\n",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 = np.mean(data, axis=1)
x = np.arange(1, avg.size + 1)
plt.bar(x, avg)
plt.show()

案例四: 有一个销售数据的 CSV 文件“销售产品数据.csv”,包含字段 “日期”、“产品名称”、“销售数量”、“销售单价”。

请使用 Python 的pandas和matplotlib库完成以下任务:

  1. 读取 CSV 文件中的数据。
  2. 计算每种产品的总销售额(销售数量乘以销售单价)。
  3. 找出销售额最高的产品。
  4. 按月份统计总销售额,并绘制折线图展示每月总销售额的变化趋势。
分解:
  1. 读取 CSV 文件中的数据。
df = pd.read_csv(
    "销售产品数据.csv",
    header=0,
    encoding="gbk"
)
print(df)
  1. 计算每种产品的总销售额(销售数量乘以销售单价)。
df['总销售额'] = df['销售数量'] * df['销售单价']
print(df)
total = df.groupby("产品名称")['总销售额'].sum()
# total = total.reset_index()
print(total)

3、找出销售额最高的产品。

print("销售额最高的产品:", total.idxmax())

4、按月份统计总销售额,并绘制折线图展示每月总销售额的变化趋势。

df['日期'] = pd.to_datetime(df['日期'])
print(df['日期'].dtype)
df['月份'] = df['日期'].dt.month
print(df)
完整:
# 请使用 Python 的pandas和matplotlib库完成以下任务:
import pandas as pd
# 1、读取 CSV 文件中的数据。
df = pd.read_csv(
    "销售产品数据.csv",
    header=0,
    encoding="gbk"
)
print(df)
# 2、计算每种产品的总销售额(销售数量乘以销售单价)。
df['总销售额'] = df['销售数量'] * df['销售单价']
print(df)
total = df.groupby("产品名称")['总销售额'].sum()
# total = total.reset_index()
print(total)
# 3、找出销售额最高的产品。
print("销售额最高的产品:", total.idxmax())
# 4、按月份统计总销售额,并绘制折线图展示每月总销售额的变化趋势。
df['日期'] = pd.to_datetime(df['日期'])
print(df['日期'].dtype)
df['月份'] = df['日期'].dt.month
print(df)