简体   繁体   English

名称未定义 我已经定义了名称

[英]name is not defined i have already defined the name

PFB the below code I am trying to calculate tax. PFB 下面的代码我正在尝试计算税收。 why do I get the NameError: name 'tax' is not defined.为什么我会收到NameError: name 'tax' is not defined. I have defined tax below still it throws the error tax not defined.我在下面定义了税,它仍然抛出未定义的错误税。

    hw = float(input("Please enter total hours worked"))
    hp = float(input("Please enter the hourly rate"))

    # Pay and OT Calculations

    rp = hp * hw

    if hw == 40 or hw <40 :
        ot = 0
        tp = rp + ot

    elif hw > 40 and hw <50 :
        ot = (hw-40)*(hp*1.5)
        tp = rp + ot

    elif hw > 50 and hw < 60 :
        ot = (hw-40)*(hp*2)
        tp = rp + ot

    elif hw > 60 or hw == 60 :
        ot = (hw-40)*(hp*2.5)
        tp = rp + ot

    else :
        print ("Thanks")

    # tax Calculations

    if tp == 200 :
       tax = float((tp/100)*15)

    elif tp > 200 and tp < 300 :
         tax = ((tp-200)/100*20) + ((200/100)*15)

    elif tp >300 and tp < 400 :
         tax = ((tp-300)/100*25) + (((tp-200)-(tp-300))/100*20) + ((200/100)*15)

    elif tp >400 and tp == 400 :
         tax = ((tp-400)/100*30) + (((tp-200)-(tp-300)-(tp-400))/100*25) + (((tp-200)-(tp-300)/100)*20) + ((200/100)*15)

    else :
        print ("Thanks")

    # Printing Results

    print ("Your Salary has been credited")
    print ("Regular Pay = ", rp)
    print ("Overtime =", ot)
    print ("Gross Salary before tax deductions = ", tp)
    print ("Income Tax applicable =", tax)

you are using your variables across the entire function but are only defining them in the if/else cases.您在整个函数中使用变量,但仅在 if/else 情况下定义它们。 This adds a lot of room for error of missing a definition somewhere within a case as in这为在案例中的某处丢失定义的错误增加了很大的空间,例如

...
if tp == 200 :
       tax = float((tp/100)*15)

    elif tp > 200 and tp < 300 :
         tax = ((tp-200)/100*20) + ((200/100)*15)

    elif tp >300 and tp < 400 :
         tax = ((tp-300)/100*25) + (((tp-200)-(tp-300))/100*20) + ((200/100)*15)

    elif tp >400 and tp == 400 :
         tax = ((tp-400)/100*30) + (((tp-200)-(tp-300)-(tp-400))/100*25) + (((tp-200)-(tp-300)/100)*20) + ((200/100)*15)

    else :
        # NO tax defined here
        print ("Thanks")
...

You should define the function-scope variables on the top of your function as:您应该将函数顶部的函数范围变量定义为:

    hw = float(input("Please enter total hours worked"))
    hp = float(input("Please enter the hourly rate"))

    rp = 0
    ot = 0
    tp = 0
    tax = 0

    # Pay and OT Calculations
    ...
    # Printing Results

    print ("Your Salary has been credited")
    print ("Regular Pay = ", rp)
    print ("Overtime =", ot)
    print ("Gross Salary before tax deductions = ", tp)
    print ("Income Tax applicable =", tax)

By setting these default values you are sure to never miss the variable initialization in your code and you will not need to add extra logic to handle the tax variable in the edge cases where it should not be changed (the else case in your question.通过设置这些默认值,您一定不会错过代码中的变量initialization ,并且您不需要添加额外的逻辑来处理不应更改的边缘情况下的税收变量(问题中的else情况。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM