UnboundLocalError,我在一个介绍类,所以我需要它哑巴下来,我该如何着手解决这个问题

2024-05-16 06:02:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道错误是getSales在赋值之前被引用了,但我不明白该如何修复它。我是进入编程课的第一学期,所以我读了其他问题,同样的错误,但我不能理解它如何影响我的代码的概念。很抱歉,这是一个重复的问题

def main():
    monthlySales = getSales() #call to get sales
    salesIncrease = getIncrease() #call to get sales increase
    storeAmount = storeBonus(monthlySales) #call to get the store bonus
    empAmount = empBonus(salesIncrease) #call to get the employee bonus
    printBonus = printBonus(storeAmount, empAmount) #call to print amounts



#This function gets the monthly sales
    def getSales():
        monthlySales = input('Enter the monthly sales $')
        monthlySales = float(monthlySales)
        return monthlySales

#This function gets the percent of increase in sales
    def getIncrease():
        salesIncrease = input('Enter percent of sales increase. For Example 4% should be entered as 4: ')
        salesIncrease = float(salesIncrease)
        salesIncrease = salesIncrease / 100
        return salesIncrease

#This function determines the storeAmount bonus
    def storeBonus(monthlySales):
        if monthlySales >=110000:
            storeAmount = 6000
        elif monthlySales >=100000:
            storeAmount = 5000
        elif monthlySales >=90000:
            storeAmount = 4000
        elif monthlySales >= 80000:
            storeAmount = 3000
        else:
            storeAmount = 0
        return storeAmount

#This function determines the empAmount bonus
    def empBonus(salesIncrease):
        if salesIncrease >= 5:
            empAmount = 75
        if salesIncrease >= 4:
            empAmount = 50
        if salesIncrease >= 3:
            empAmount = 40
        return empAmount


#This function prints the bonus information
    def printBonus(storeAmount, empAmount):
        print 'The store bonus amount is $', storeAmount
        print 'The employee bonus amount is $', empAmount
        if storeAmount == 6000 and empAmount == 75:
            print 'Congrats! You have reached the highest bonus amounts possible!'

#calls main
main()

Tags: thetogetifdeffunctioncallthis
2条回答

我以前也遇到过同样的问题,您只需添加一个问题:全局var 例如,在代码中:

 def getSales():
    global monthlySales

如果要在外部创建的函数中使用变量,则必须使用它。 如果你在每个函数中为你使用的每个变量加上这个,你就可以了

如评论中所述,缩进已关闭。但是,我知道您现在已经解决了这个问题,但是您得到了一个错误,即在赋值之前引用了printBonus

问题在于:

    printBonus = printBonus(storeAmount, empAmount) #call to print amounts

这里的问题是您有一个名为printBonus的局部变量和一个名为printBonus的函数。在main函数中,局部变量优先,因此每当函数引用printBonus时,它都会引用局部变量

在上面的一行中,在Python将值赋给printBonus之前,它首先必须弄清楚该值是什么。然而,这似乎是通过“调用”相同的printBonus东西来实现的,这是一个尚未赋值的变量

最简单的解决方法是不将任何局部变量赋给调用printBonus的结果,因为它不return任何内容:

    printBonus(storeAmount, empAmount) #call to print amounts

没有名为printBonus的局部变量意味着在main函数中,printBonus将按预期引用函数printBonus()

你还说你“修复了一些elif”。我看不出您做了哪些更改,但是您可能需要检查empBonus函数是否处理salesIncrease小于3的情况

相关问题 更多 >