在企业管理系统中,工资计算是一个基础但关键的功能。本文将基于Python实现一个员工工资计算系统,通过分段函数处理不同加班时段的薪酬计算,展示如何将业务规则转化为清晰的代码逻辑。
一、任务要求
编写函数 pay(),接收两个输入参数:
salaryHour:小时工资hours:上周员工工作的小时数
薪酬计算规则:
- 小于等于40小时:按正常小时工资计算
- 大于40小时但小于等于60小时:前40小时正常计算,超出部分按1.5倍计算
- 大于60小时:前40小时正常计算,40-60小时部分按1.5倍计算,超出60小时部分按2倍计算
二、代码实现
案例:员工工资分段计算
代码
def pay(salaryHour, hours):
if hours <= 40:
return salaryHour * hours
elif hours > 40 and hours <= 60:
return salaryHour * 40 + salaryHour * 1.5 * (hours - 40)
else: # hours > 60
return salaryHour * 40 + salaryHour * 1.5 * 20 + salaryHour * 2 * (hours - 60)
# 测试用例
print(pay(40, 70)) # 工作70小时,每小时40元
运行结果
yaml
yaml
3800.0
案例:外卖平台商家经营数据分析
代码
python
体验AI代码助手
代码解读
复制代码
import pandas as pd
import matplotlib.pyplot as plt
# 1. 读取CSV文件数据,计算商家单日营收
df = pd.read_csv("外卖商家数据.csv")
df["商家单日营收"] = df["接单数量"] * df["客单价 (元)"] * (1 - df["平台抽成比例 (%)"] / 100)
# 2. 按"接单日期"提取日期信息,统计每周各日的平均接单数量和平均配送时长
df["接单日期"] = pd.to_datetime(df["接单日期"])
df["星期"] = df["接单日期"].dt.weekday
week_map = {0:"周一", 1:"周二", 2:"周三", 3:"周四", 4:"周五", 5:"周六", 6:"周日"}
df["星期名称"] = df["星期"].map(week_map)
df_mean = df.groupby(["星期名称"]).agg(
平均接单数量=("接单数量", "mean"),
平均配送时长=("配送时长 (分钟)", "mean")
)
# 3. 计算配送时长的变异系数和90分位数
data_mean = df["配送时长 (分钟)"].mean()
data_std = df["配送时长 (分钟)"].std()
cv = data_std / data_mean
q90 = df["配送时长 (分钟)"].quantile(0.9)
# 4. 按菜品类型分组,统计每组的平均单日营收和准时配送率
df["准时配送"] = df["配送时长 (分钟)"] <= 30
df_states = df.groupby("菜品类型").agg(
平均单日营收=("商家单日营收", "mean"),
准时配送率=("准时配送", "mean")
)
# 绘制柱状图
plt.rcParams['font.sans-serif'] = ['SimHei']
# 平均单日营收柱状图
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.bar(df_states.index, df_states['平均单日营收'])
plt.title("平均单日营收")
plt.xticks(rotation=45)
# 准时配送率柱状图
plt.subplot(1, 2, 2)
plt.bar(df_states.index, df_states['准时配送率'])
plt.title("准时配送率")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
# 5. 保存平台抽成比例>20%的商家数据
df_new = df[df['平台抽成比例 (%)'] > 20]
df_new.to_csv("高抽成商家数据.csv", index=False)
print("配送时长的变异系数为{:.2f},90分位数为{:.2f}".format(cv, q90))
print("\n星期分组统计结果:")
print(df_mean)
print("\n菜品类型分组统计结果:")
print(df_states)