【问题标题】:Python 3 - calculate total in if else function using for loopPython 3 - 使用 for 循环计算 if else 函数中的总数
【发布时间】:2019-02-22 11:26:29
【问题描述】:

如果有人可以给我一些提示,为我指明正确的方向,这样我就可以自己解决它,那就太好了。 我正在尝试根据员工人数计算总收入和平均收入。我是否必须制作另一个列表或迭代当前列表(list1)才能解决。

def get_input():

    Name = input("Enter a name: ")
    Hours = float(input("Enter hours worked: "))
    Rate = float(input("Enter hourly rate: "))

    return Name, Hours, Rate

def calc_pay(Hours, Rate):

    if Hours > 40:
        overtime = (40 * Rate) + (Hours - 40) * (Rate * 1.5)
        print(list1[0], "should be paid", overtime)
    else:
        no_overtime = (Hours * Rate)
        print(list1[0], "should be paid", no_overtime)

    return Hours, Rate



x = int(input("Enter the number of employees: "))

for i in range(x):
   list1 = list(get_input())
   calc_pay(list1[1], list1[2])

   i += 1

【问题讨论】:

  • 你几乎得到它 OP。您需要做的就是调用get_input() 函数并存储返回值。然后,您需要将这些值传递给calc_pay() 函数

标签: python-3.x


【解决方案1】:

如果您想跟踪所有员工的总工资,您可能需要对代码进行两项重大更改。

第一个是将计算的支付金额更改为calc_payreturn,而不是仅打印它(当前返回值非常无用,因为调用者已经有了这些值)。您可能希望跳过函数中的打印(因为计算值并返回它是函数的主要工作),并在必要时让调用者完成。

第二个更改是在您的顶级代码中添加支付值。您可以将工资值附加到列表中并在最后添加(使用sum),或者您可以只跟踪运行总计并在计算后将每个员工的工资添加到其中。

如果我正在编写它,我可能会在您的代码中更改一些其他小东西,但它们不是正确性问题,只是样式问题。

首先是变量名。 Python 有一个指南,PEP 8,它对编码风格提出了很多建议。这只是作为标准库一部分的 Python 代码的官方规则,但许多其他 Python 程序员松散地使用它作为所有 Python 项目的基线样式。它建议对大多数变量和函数名称使用lowercase_names_with_underscores,并为类保留CapitalizedNames。所以我会使用namehoursrate 而不是这些名称的大写版本。我还强烈建议您使用有意义的名称,而不是像 x 这样的通用名称。 ix 等一些短名称在某些情况下(如坐标和索引)可能很有用,但我会避免将它们用于任何非通用目的。您似乎也没有将您的i 变量用于任何有用的东西,因此将其重命名为_ 可能是有意义的,这表明它不会被使用。我会使用num_employees 或类似的东西而不是xlist1 这个名字也很糟糕,但我建议在下面完全取消该列表。带有数字的变量名称通常不是一个好主意。如果您同时使用大量编号名称(例如list1list2list3 等),您可能应该将值放在单个列表中(列表列表)而不是编号变量。如果您只有几个,它们应该有更具体的名称(例如 employee_data 而不是 list1)。

我的第二个建议是处理来自get_input 的返回值。您可以将函数返回的值的元组解包到单独的变量中,而不是将它们放入列表中。只需将用逗号分隔的名称放在= 运算符的左侧即可:

name, hours, rate = get_input()
calc_pay(hours, rate)

我的最后一个小建议是关于避免代码中的重复。一个众所周知的编程建议是“不要重复自己”(通常缩写为 DRY),因为重复的(尤其是复制/粘贴的)代码以后很难修改,并且有时会隐藏一些细微的错误。你的calc_pay 函数有一个重复的print 行,可以很容易地移到if/else 块之外,这样就不需要重复了。只需让条件代码的两个分支都将计算出的工资写入相同的变量名称(而不是不同的名称),然后在打印行中使用该单个变量(如果您遵循我上面建议的主要修复方法,则使用 return 行问题)。

【讨论】:

  • 我得到了第一个更改,但我不明白您如何进行第二个更改?
【解决方案2】:

感谢人们的帮助。这是答案

payList = []

num_of_emps = int(input("Enter number of employees: "))

for i in range(num_of_emps):           

name, hours, rate = get_input()   

pay = calc_pay(hours, rate) 

payList.append(pay)

total = sum(payList)

avg = total / num_of_emps
print("The total amount to be paid is $", format(total, ",.2f"), sep="")
print("\nThe average employee is paid $", format(avg, ",.2f"), sep="")

【讨论】:

    【解决方案3】:

    输入物体质量,然后计算其重量。 如果物体重量超过 500。 否则物体重量小于 100。

    使用公式:重量 = 质量 x 9.8

    【讨论】:

      猜你喜欢
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2017-08-02
      • 2019-12-04
      相关资源
      最近更新 更多