困惑于全局常量(python)

时间:2014-10-30 19:01:22

标签: python

嗨,这是我们遇到的问题

"写一个Python程序,要求用户输入他们的总工资,然后根据以下扣除计算净工资; PRSI3%, 健康贡献4% 支付41% U.S.C。 7% 提示: 扣除应表示为全局常量。 您的程序应包含许多功能,即向用户显示指令的功能;一个函数,它从用户那里获取输入,然后调用第三个函数来计算净工资(即总工资扣除额)"

这是我的努力

def instructions():
    print ("Hello, and welcome to the programme")


def getOutput():
    G = int(input("Enter gross income: "))
    return G


def displayBreak():
    print("")
    print("Less deductions")
    print("---------------")



def doDeductions():
    Value=G*.03
    Health=G*.04
    Pay=G*.41
    Social=G*.07
    Net=G-Value-Health-Pay-Social

print("PRSI                    ",Value)
print("Health Contrb.          ",Health)
print("PAYE                    ",Pay)
print("USC                     ",Social)
print("")
print("Net Pay                 ",Net)
print("Programme Complete")



################################################


instructions()

print("")

getOutput()


displayBreak()

print("")

doDeductions()

这" doDeductions"不会工作我知道这是错的,但我不知道为什么

非常感谢任何帮助,

谢谢

1 个答案:

答案 0 :(得分:1)

问题在于,您不会在任何地方存储价值,健康,薪酬,社交或网络,而是在您的职能范围内。这些值仅在doDeductions()方法的持续时间内存在,并且仅在该范围内存在。一旦你到达你的print()语句链,它们就不存在了,这是程序无法运行的原因之一 - 你要求它打印不存在的对象。

请注意,您还要忽略作业的任务之一,即将演绎作为全局常量存储。

在类的上下文之外,您应该做的是存储全局值:

PRSI = 0.03
HEALTH_CONTRIBUTION = 0.04
PAYE = 0.41
USC = 0.07

G = 0
Value = 0
Health = 0
Pay = 0
Social = 0
Net = 0

def getOutput():
    doDeductions(int(input("Enter gross income: ")))

def doDeductions(G):
    global Value, Health, Pay, Social, Net, PRSI, HEALTH_CONTRIBUTION, PAYE, USC
    Value = G * PRSI
    Health = G * HEALTH_CONTRIBUTION
    Pay = G * PAYE
    Social = G * USC
    Net = G - Value - Health - Pay - Social

global关键字用于向解释器说明您在非全局范围中定义的变量应该分配给全局变量。

这是一种非常丑陋的方式,但是,类的一个优点是,您可以拥有可以使用self.member访问的成员,而不是每次引用时都需要调用全局顶部范围内的变量。