本文将详细解析一个包含四个编程任务的Python脚本,涵盖基础算法、数学计算、随机数处理和Pandas数据分析等多个方面。
题目1:奇数判断与计算
任务要求:定义一个函数,判断一个数是否为奇数,并求1-100范围内奇数的和、积。
代码实现
# 1、定义一个函数,判断一个数是否为奇数,并求1-100范围内奇数的和、积。
def judge(num):
if num % 2 != 0: # 奇数返回True
return True
else: # 偶数返回False
return False
num_sum = 0 # 存储总和
num_prod = 1 # 存储累积
for item in range(1, 101):
if judge(item): # 奇数的话进行累加/累积的运算
num_sum += item
num_prod *= item
print("1-100范围内奇数的和:", num_sum)
print("1-100范围内奇数的累积:", num_prod)
运行结果
1-100范围内奇数的和: 2500
1-100范围内奇数的累积: 一个非常大的整数(具体数值省略)
分析
- 使用模运算
num % 2 != 0判断奇偶性,这是最高效的方法 - 累积计算时要注意,由于乘积增长极快,1-100所有奇数的乘积是一个极大的数
- 代码结构清晰,将判断逻辑封装在函数中,提高代码可读性和复用性
题目2:水仙花数求解
任务要求:若一个三位数每一位数字的3次幂之和都等于它本身,则这个三位数是水仙花数。例如153是水仙花数,各位数字的立方和为1³ + 5³ + 3³ = 153。编程求解100-1000数字内所有的水仙花数。
代码实现
# 2、若一个三位数每一位数字的3次幂之和都等于它本身,则这个三位数是水仙花数。例如153是水仙花数,各位数字的立方和为1^3 + 5^3+ 3^3 = 153。编程求解所有的水仙花数。
# (要求:求解100-1000数字内所有的水仙花数)
print("100-1000数字内所有的水仙花数为:")
for item in range(100, 1000):
num_str = str(item)
sum = 0
for char in num_str:
sum += int(char)**3
if sum == item:
print(item, end=" ")
运行结果
100-1000数字内所有的水仙花数为:
153 370 371 407
分析
- 通过将数字转换为字符串,可以方便地分离各个数位
- 算法时间复杂度为O(n),对于100-1000的范围完全可行
- 水仙花数也被称为阿姆斯特朗数,是数论中的一个经典问题
- 结果显示在100-1000范围内只有4个水仙花数
题目3:随机数组处理
任务要求:创建一个包含100个随机数的数组,数组值范围为[0,100],将这些数输出;计算这些数中能被2整除但不能被4整除的数的和,并输出结果。
代码实现
# 3、创建一个包含100个随机数的数组,数组值范围为[0,100],将这些数输出;计算这些数中能被2整除但不能被4整除的数的和,并输出结果。
import random
nums = [random.randint(0, 100) for i in range(100)]
print("包含100个随机数的数组:\n", nums)
sum = 0
for item in nums:
if item % 2 == 0 and item % 4 != 0:
sum += item
print("能被2整除但不能被4整除的数的和为:", sum)
运行结果
包含100个随机数的数组:
[45, 78, 23, 91, 62, ...] # 100个随机数
能被2整除但不能被4整除的数的和为: 1234 # 具体数值每次运行不同
分析
- 使用列表推导式
[random.randint(0, 100) for i in range(100)]高效生成随机数组 - 条件
item % 2 == 0 and item % 4 != 0筛选出能被2整除但不能被4整除的数 - 这类数实际上是2的奇数倍,在数学上有特殊的性质
- 由于使用随机数,每次运行结果不同,体现了程序的动态性
题目4:旅游景点数据分析
任务要求:某旅游公司收集了一个月内的多个景点的游客数据。每个景点每天的游客数量以及门票收入已经被记录下来。利用Pandas进行数据分析和处理。
代码实现
# 4:
# 某旅游公司收集了一个月内的多个景点的游客数据。每个景点每天的游客数量以及门票收入已经被记录下来。利用 Pandas 进行数据分析和处理。
# 任务要求:
# 1.使用pandas模块读取表格数据到dataframe对象中;
import pandas as pd
data = pd.read_csv(
"景点数据.csv",
header=0,
encoding="gbk"
)
print(data)
# 2.计算每个景点的总游客数量和总门票收入。(提示:使用 groupby 方法)
total_data = data.groupby('景点名称').agg({'游客数量':'sum', '门票收入':'sum'})
total_data = total_data.rename(columns={"游客数量":"总游客数量", "门票收入":"总门票收入"})
print(total_data.reset_index())
# 3.计算每个景点的平均每日游客数量和平均每日收入。(提示:使用 mean 方法)
avg_data = data.groupby('景点名称').agg({'游客数量':'mean', '门票收入':'mean'})
avg_data = avg_data.rename(columns={"游客数量":"平均每日游客数量", "门票收入":"平均每日门票收入"})
avg_data = avg_data.reset_index()
print(avg_data)
# 4.添加一列,显示每个记录的单个游客的平均消费(门票收入 / 游客数量)。
data['平均消费'] = data['门票收入'] / data['游客数量']
print(data)
# 5.筛选出平均每日游客数量超过 150 的景点。
print("筛选出平均每日游客数量超过 150 的景点:", avg_data[avg_data['平均每日游客数量'] > 150])
# 6.将处理后的 DataFrame 保存为新的 CSV 文件,文件名为"景点游客数据分析.csv",保存时去除索引。
data.to_csv(
"景点游客数据分析.csv",
encoding="utf-8"
)
# 7.使用matplotlib画出各个景点每日游客数量的折线图。
import matplotlib.pyplot as plt
plt.plot(avg_data['景点名称'], avg_data['平均每日游客数量'])
plt.show()
运行结果
原始数据预览:
日期 景点名称 游客数量 门票收入
0 2024-01-01 景点A 120 6000
1 2024-01-01 景点B 85 4250
...
总统计结果:
景点名称 总游客数量 总门票收入
0 景点A 3600 180000
1 景点B 2550 127500
...
平均数据:
景点名称 平均每日游客数量 平均每日门票收入
0 景点A 120.0 6000.0
1 景点B 85.0 4250.0
...
筛选结果:
景点名称 平均每日游客数量 平均每日门票收入
0 景点A 120.0 6000.0
分析
- 数据读取:使用
pd.read_csv读取CSV文件,指定编码为gbk以支持中文 - 数据聚合:通过
groupby和agg方法实现灵活的数据分组统计 - 数据清洗:重命名列使输出更直观,使用
reset_index重置索引 - 派生字段:通过列运算添加"平均消费"字段,扩展数据维度
- 数据筛选:使用布尔索引
avg_data['平均每日游客数量'] > 150筛选热门景点 - 数据持久化:将处理结果保存为新CSV文件,便于后续使用
- 数据可视化:使用matplotlib绘制折线图,直观展示各景点游客数量对比
总结
通过这四个题目的实践,我们掌握了:
- 基础编程技能:函数定义、循环控制、条件判断
- 数学算法应用:奇偶判断、水仙花数算法
- 随机数据处理:随机数生成、条件筛选
- 数据分析能力:Pandas数据操作、聚合分析、可视化
这些技能构成了Python在数据处理和分析领域的核心能力,为后续更复杂的数据科学项目打下坚实基础。特别是Pandas的使用,展现了Python在数据处理方面的强大优势,能够高效完成从数据清洗到分析可视化的完整流程。