我试图定义一个条件函数,该函数的定义取决于输入值。我还希望它在列表中包含的几个不同输入上运行。
我得到的输出不是我期望的。对于以下输入:收入= [500、1500、4000]我希望输出为:50、200,但实际输出分别为:-150、150和900。 我期望的输出是:。仅在列表中输入一个收入值时,我的确得到了正确的输出。
incomes = [500, 1500, 4000]
for current_income in incomes:
income = current_income
if income <1000:
def tax(income):
return income*0.1
elif 1000<=income<2000:
def tax(income):
return 1000*0.1 +(income-1000)*0.2
else:
def tax(income):
return 1000*0.1+ 1000*0.2 + (income-2000)*0.3
for i in incomes:
result = tax(i)
print(result)
似乎列表中的值顺序很重要:我颠倒了列表中的收入顺序,我得到的输出是:400、150、50。 我知道问题出在for循环与if,elsif和else条件的交互,但是我看不出代码中实际上有什么错误。
答案 0 :(得分:3)
为什么要有条件地创建函数?使用其中一种,并根据输入的收入来决定在其中应用什么税种:
def tax(income):
if income < 1000:
return income*0.1
elif 1000 <= income < 2000:
return 1000*0.1 +(income-1000)*0.2 # 100 + ...
else:
return 1000*0.1 + 1000*0.2 + (income-2000)*0.3 # 300 + ...
incomes = [500, 1500, 4000]
for i in incomes:
result = tax(i)
print(result)
输出:
50.0
200.0
900.0
要尝试使用“重新定义的函数”,您需要将print语句放入同一循环中,以从当前定义的tax
函数中受益。
(非常糟糕的风格!)
incomes = [500, 1500, 4000]
for i in incomes:
if i <1000:
def tax(income):
return income*0.1
elif 1000<=i<2000:
def tax(income):
return 1000*0.1 +(income-1000)*0.2
else:
def tax(income):
return 1000*0.1+ 1000*0.2 + (income-2000)*0.3
# use the tax function that _currently_ is valid for `tax`
result = tax(i)
print(result)
答案 1 :(得分:1)
问题在于您不断重新定义tax
函数。当您完成第一个for循环时,最后一次定义的内容就是您的最终结果。
最简单的解决方法是将支票放入函数中,如其他答案所示。
如果由于某种原因需要有条件地创建函数,则必须重新组织事物,以便在重新定义函数之前使用该函数。