【问题标题】:problem with calculating overtime pay on pythonpython计算加班费的问题
【发布时间】:2021-12-05 03:48:42
【问题描述】:

我是一个新的 python 用户。我正在编写的代码有问题。我应该 制定每周工资检查计划,计算您将获得多少报酬。我还必须考虑加班时间。

这是给我老师的指示 -


在您工作的前 40 小时,您将获得正常的小时工资。 接下来的 10 小时是加班时间,支付给您 1.5 倍的工资 每小时收费。您剩余的时间(超过 50 小时)将支付给您 每小时费率的两倍。

这是我为它编写的代码:


def weeklypaycheck(hours,rate):
    if (hours <= 40):
        pay = hours * rate
        print("This is your pay: ",pay)
    elif hours > 40 or hours < 50:
        nm = 40 * rate
        othours = hours - 40
        otpay = (othours * (rate * 1.5))
        print("This is your pay: ", otpay + nm)
    elif hours > 50:
        nm = 40 * rate
        otpay = (10 * (rate * 1.5))
        othours = hours - 50
        otpay = (othours2 * (rate *2))
        print("This is your pay: ", nm+ otpay + otpay)

所以当我在 shell 窗口中运行它时。 我输入:weeklypaycheck(55,10)

ps。 “55”是总工作时间,“10”是我每小时得到多少报酬

这是我的输出:This is your pay: 625.0

我的输出应该是This is your pay: 650.0 而不是This is your pay: 625.0

如果输入weeklypaycheck(51,20)也一样 我会输出This is your pay 1130.0

我的输出应该是This is your pay: 1140 而不是This is your pay: 1140

我的数学可能不对,但我很困惑。如果有人愿意帮助我,谢谢!

【问题讨论】:

  • 为了清晰起见,您可以稍微重构一下代码。您在每个分支机构都有相同的基本工资计算。最后两个分支具有相同的加班计算(或应该)。还有一个小时 == 50 的错误,它不匹配任何东西。您的条件有 3 个分支,但只有两个边界,因此最后一个语句可能是 else。您在每个分支中都有相同的(如果您重构它)打印语句,因此不是有条件的。

标签: python


【解决方案1】:

您写道:if hours &gt; 40 or hours &lt; 50。非常仔细地问问自己,什么时间可以满足这一点。例如,60 小时是否满足此要求? 30 小时怎么样?

【讨论】:

    【解决方案2】:

    我按照上面的建议重构了代码以消除重复代码,在有意义的情况下使用 else 而不是 elif,修复了 hours == 50 的缺陷,并引入了一个字典 h 到逻辑分组时间休息-向下:

    def weeklypaycheck(hours, rate):
        h = {'regular': 0, 'overtime': 0, 'extra': 0}
        if hours <= 40:
            h['regular'] = hours
        else:
            h['regular'] = 40
            if hours <= 50:
                h['overtime'] = hours - 40
            else:
                h['overtime'] = 10
                h['extra'] = hours - 50
        pay = h['regular'] * rate +\
            h['overtime'] * 1.5 * rate +\
            h['extra'] * 2 * rate
        print(f"This is your pay: {pay}")                                                                      
    

    对于这个问题有不同的思考方式,即每个小时的最小或最大小时数是多少。这产生了这个实现(请注意,只有小时细分计算发生了变化):

    def weeklypaycheck(hours, rate):
        h = {
                'regular': min(hours, 40),
                'overtime': max(min(hours - 40, 10), 0),
                'extra': max(hours - 50, 0)
        }
        pay = h['regular'] * rate +\
            h['overtime'] * 1.5 * rate +\
            h['extra'] * 2 * rate
        print(f"This is your pay: {pay}")
    

    我会像这样测试边界条件:

    for hours in [39, 40, 41, 49, 50, 51]:
        weeklypaycheck(hours, 1)
    

    结果是:

    This is your pay: 39.0
    This is your pay: 40.0
    This is your pay: 41.5
    This is your pay: 53.5
    This is your pay: 55.0
    This is your pay: 57.0
    

    【讨论】:

      猜你喜欢
      • 2021-12-22
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 2022-10-24
      相关资源
      最近更新 更多