0

我从这段代码中得到了一些错误,谁能解释一下似乎是什么问题?谢谢!该程序应该计算已申报(计数器)数量的员工的工资单。

我从下面的代码中得到了一些错误,谁能解释一下似乎是什么问题?谢谢!

while (True):
    status = eval(input("Are they single(1) or married(2)? \n"))
    if status != 1 or 2:
        break

注意:这是 Python 3.3

这是下面的其余代码。另外:请随时进行您喜欢的任何改进!我正在学习!

def computeGrossPay(hours, rate):
    if hours > 40:
        grossPay = (40 * rate) + ((hours - 40) * 1.5 * hours)
    else:
        grossPay =  hours * rate
    return grossPay

def computeTaxAmount(status, grossPay):
    if status == 1:
            if grossPay <= 42:
                taxAmount = 0
            elif grossPay > 42 and grossPay <= 214:
                taxAmount = (grossPay - 15) * .1
            elif grossPay > 214 and grossPay <= 739:
                taxAmount = 17.2 + ((grossPay - 214) * .15)
            elif grossPay > 739 and grossPay <= 1732:
                taxAmount = 95.95 + ((grossPay - 739) * .28)
            elif grossPay > 1732 and grossPay <= 2566:
                taxAmount = 344.2 + ((grossPay - 1732) * .28)
            elif grossPay > 3566 and grossPay <= 7703:
                taxAmount = 857.72 + ((grossPay - 3566) * .33)
            elif grossPay > 7703 and grossPay <= 7735:
                taxAmount = 2222.93 + ((grossPay -7703) * .35)
            elif grossPay > 7735:
                taxAmount = 2234.13 + ((grossPay - 7735) * .396)
    elif status == 2:
            if grossPay <= 160:
                taxAmount = 0
            elif grossPay > 160 and grossPay <= 503:
                taxAmount = (grossPay - 160) * .1
            elif grossPay > 503 and grossPay <= 1554:
                taxAmount = 34.3 + ((grossPay - 503) * .15)
            elif grossPay > 1554 and grossPay <= 2975:
                taxAmount = 191.95 + ((grossPay - 1554) * .28)
            elif grossPay > 2975 and grossPay <= 4449:
                taxAmount = 547.2 + ((grossPay - 2975) * .28)
            elif grossPay > 4449 and grossPay <= 7820:
                taxAmount = 959.92 + ((grossPay - 4449) * .33)
            elif grossPay > 7820 and grossPay <= 8813:
                taxAmount = 2072.35 + ((grossPay -7820) * .35)
            elif grossPay > 8813:
                taxAmount = 2419.9 + ((grossPay - 8813) * .396)
    return taxAmount

def computeNetPay(grossPay, taxAmount):
    netPay = grossPay - taxAmount
    return netPay

def main():
    totalGrossPay = 0
    print("Welcome to the Payroll Program")
    counter = eval(input("How many employees will be entered? \n"))
    for i in range(counter):
        name = input("What are the first and last names of the employee? \n")
        id = input("What are the last four numbers of his/her Social Security Number? \n")
        hours = eval(input("How many hours did they work? \n"))
        rate = eval(input("What was the rate? \n"))
        while (True):
            status = eval(input("Are they single(1) or married(2)? \n"))
            if status != 1 or 2:
                break
        grossPay = computeGrossPay(hours, rate)
        taxAmount = computeTaxAmount(status, grossPay)
        netPay = computeNetPay(grossPay, taxAmount)
        totalGrossPay = totalGrossPay + grossPay
        averageGrossPay = totalGrossPay / counter

        print("The ID is ", id)
        print("The name is ", name, ".")
        print("This employee worked ", hours, " hours.")
        print("The hourly rate was ", rate)
        print("The gross pay was $", grossPay)
        print("The tax amount withheld for the week is $", taxAmount)
        print("The net pay is $", netPay)
    print("The total gross pay was $", totalGrossPay)
    print("The average gross pay was $", averageGrossPay)

main()
4

2 回答 2

2

你应该or像这样使用运算符

if status == 1 or status == 2:

更优雅

if status in (1, 2):

因为

if status != 1 or 2:

表示status不应该等于1或只是数值2。即使status == 1, 数值 2 将被视为 True,所以条件将被满足并且循环将始终中断。

于 2013-11-13T04:59:23.747 回答
1

or不能那样工作。编写所需内容的正确 Python 方法是:

while True:
    status = input("Are they single(1) or married(2)? \n")
    try:
        status = int(status)
    except ValueError:
        # You should print a message here.
        pass
    else:
        if status in (1, 2):
            break

避免使用eval()for 输入,因为任何人都可以输入任意(并且可能有害的)Python,并且 python 会eval()使用它。

于 2013-11-13T05:02:10.897 回答