尝试将变量分配给值会导致“无法分配给运算符”错误

时间:2014-10-27 04:19:20

标签: python operator-keyword

    def main():
    bonus()
def bonus():
    #Dollars from sales are input, then time worked,
    #then the salary and possible bonus is added
    #to the calculated commission based on the earned commission rate
    monthlySales=int(input('How much money did your employee make in sales?',))
    if monthlySales<10000:
        commRate=0
    elif monthlySales>=10000 and monthlySales<100000:
        commRate=0.02
    elif monthlySales>=100001 and monthlySales<500000:
        commRate=0.15 and monthlyBonus=1000
    elif monthlySales>=500001 and monthlySales<1000000:
        commRate=0.28 and monthlyBonus=5000
    elif monthlySales>1000000:
        commRate=0.35 and monthlyBonus=100000
    yearsWorked=int(input('How many years has your employee worked here? Round down to the nearest year.',))
    if yearsWorked>=5 and monthlySales>=100000:
        extraBonus+1000
    elif yearsWorked<1:
        monthsWorked=int(input('How many full months has your employee worked here?',))
        if monthsWorked<3:
            print('Your employee has not worked here long enough to qualify for a bonus.')            
main()

我要做的是制定一个程序,其中预定的佣金率是根据员工的销售额输入计划的。

我在

上收到“无法分配给运营商”错误
commRate=0.35 and monthlyBonus=100000

,它告诉我,我将在if嵌套中直接赋值的其余变量上得到相同的错误。

我做错了什么,在这里?

4 个答案:

答案 0 :(得分:0)

elif monthlySales>=100001 and monthlySales<500000:
    commRate=0.35 ; monthlyBonus=100000

elif monthlySales>=100001 and monthlySales<500000:
    commRate=0.35
    monthlyBonus=100000

答案 1 :(得分:0)

在为变量赋值时,不需要使用and运算符。但您可以使用检查elif语句是否符合条件(所有条件)。请尝试以下操作:

elif monthlySales>=100001 and monthlySales<500000:
    commRate=0.15
    monthlyBonus=1000
elif monthlySales>=500001 and monthlySales<1000000:
    commRate=0.28
    monthlyBonus=5000
elif monthlySales>1000000:
    commRate=0.35
    monthlyBonus=100000 

答案 2 :(得分:0)

在Python中,与C语言不同,在表达式中不能进行赋值,因此这就是错误的原因。这是为了防止在进行比较时意外分配。请在第5.7节的最后一段中阅读:

https://docs.python.org/2/tutorial/datastructures.html

答案 3 :(得分:0)

我猜(希望:)不是bonus()函数的完整列表,因为它实际上并没有返回或打印它计算的任何数据。但是我已经注意到你需要处理的那个函数中的一些东西。

extraBonus+1000对未定义的变量(extraBonus)执行计算,然后它不会将结果存储在任何位置。

if...elif部分中的前两个条件不会为monthlyBonus设置值;在函数中稍后使用monthlyBonus之前,您需要先修复它。

此外,if...elif部分执行冗余测试,因此可以简化:

monthlyBonus = 0
if monthlySales < 10000:
    commRate = 0
elif monthlySales < 100000:
    commRate = 0.02
elif monthlySales < 500000:
    commRate = 0.15; monthlyBonus = 1000
elif monthlySales < 1000000:
    commRate = 0.28; monthlyBonus = 5000
else:
    commRate = 0.35; monthlyBonus = 100000

除非之前的测试失败,否则我们无法访问elif monthlySales < 100000,因此我们知道monthlySales>=10000为真,再次测试是多余的。等