Python实现一个员工工资计算系统

3 阅读3分钟

在企业管理系统中,工资计算是一个基础但关键的功能。本文将基于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)