如何使用python有条件地存储值?

如何使用python有条件地存储值?,python,if-statement,Python,If Statement,因此,基本原理是,我试图让用户输入他们的年薪,然后程序将通过一组if语句运行它,然后返回他们所处的纳税等级,从他们的年薪中减去金额,返回他们的总收入。主要的问题是,它将正确运行任何数额的$0-$9525,但一旦你跳到12%和22%,它不会成为他们的。比如,如果你输入100000美元,它只会从中扣除12%,而它应该扣除24%。以下是当前形式的Python代码: #Takes someone's yearly salary yearlySalary = eval(input("Please ente

因此,基本原理是,我试图让用户输入他们的年薪,然后程序将通过一组if语句运行它,然后返回他们所处的纳税等级,从他们的年薪中减去金额,返回他们的总收入。主要的问题是,它将正确运行任何数额的$0-$9525,但一旦你跳到12%和22%,它不会成为他们的。比如,如果你输入100000美元,它只会从中扣除12%,而它应该扣除24%。以下是当前形式的Python代码:

#Takes someone's yearly salary
yearlySalary = eval(input("Please enter your yearly salary: "))

if(yearlySalary < 9525):
    tax = yearlySalary * .10
    yearlySalary = yearlySalary-tax

elif(yearlySalary > 9526 && yearlySalary < 38700):
    tax = yearlySalary * .12
    yearlySalary = yearlySalary-tax

elif(range (38701, 82500)):
    tax = yearlySalary * .22
    yearlySalary = yearlySalary-tax

elif(range (82501, 157500)):
    tax = yearlySalary * .24
    yearlySalary = yearlySalary-tax

elif(range(157501, 200000)):
    tax = yearlySalary * .32
    yearlySalary = yearlySalary-tax

elif(range(200001, 500000)):
    tax = yearlySalary * .35
    yearlySalary = yearlySalary-tax

elif(yearlySalary > 500001):
    tax = yearlySalary * .37
    yearlySalary = yearlySalary-tax
#拿某人的年薪
yearlySalary=eval(输入(“请输入您的年薪:”)
如果(年历<9525):
税=年度日历*.10
年税
elif(yearlySalary>9526和&yearlySalary<38700):
税=年度日历*.12
年税
elif(范围(3870182500)):
税=年度日历*.22
年税
elif(范围(82501157500)):
税=年度日历*.24
年税
elif(范围(1575012000)):
税=年度日历*.32
年税
elif(范围(200001,500000)):
税=年度日历*.35
年税
elif(年平均值>500001):
税=年度日历*.37
年税

您必须更改您的
elif
如下:

elif(yearlySalary in range (38701, 82500)):

要知道你的年薪是否在这个范围内,这里有一些关于税阶如何工作的问题;括号的顺序应相反,以便首先捕捉最高的税括号,并且只有超过该括号的金额才应按该金额征税

另外,对于您的示例,
elif(范围(82501157500)):
不会捕获年薪=100000,因为else语句没有断言年薪是否实际在该范围内

由于使用了不正确的“AND”运算符,它被困在12%的范围内:使用
而不是
&&

使用:
  • 它允许更干净的代码
  • yearlySalary
    已装箱,没有混乱的代码,如:
    • yearlySalary>9526和yearlySalary<38700
    • elif(年平均范围(3870182500))
  • 对于以下代码,箱子尺寸如下所示
    • 0-9525的价格为10%
    • 9526-38700占12%
    • 38701-82500占22%
    • 82501-157500的24%
    • 157501-200000的32%
    • 200001-500000的35%
    • 500001及以上为37%
  • .digitalize
    的工作原理是找到
    箱子的索引,其中,
    收入
    属于该索引。给定索引,在
    tax\u per
    中找到相应的值
  • bin
    用作变量,因为
    bin
    是一个内部python函数,我们不会覆盖内部函数
将numpy导入为np
def税(收入:浮动)->浮动:
tax_per=np.数组([.10、.12、.22、.24、.32、.35、.37])
bin=np.数字化(收入,bin=[95263870182501157501200150001])
申报收入-收入*(按[bin]计税)
yearlySalary=浮动(输入(“请输入您的年薪:”)
打印(税_括号(年度日历))
输出:
请输入您的年薪:37524
33021.12
使用
if-elif-else
  • 从最大到最小排列垃圾箱
def old_way(年历):
如果年降雨量>500000:
税=年度日历*.37
年税
elif yearlySalary>200000:
税=年度日历*.35
年税
elif yearlySalary>157500:
税=年度日历*.32
年税
elif yearlySalary>82500:
税=年度日历*.24
年税
elif yearlySalary>38700:
税=年度日历*.22
年税
elif yearlySalary>9525:
税=年度日历*.12
年税
其他:
税=年度日历*.10
年税
返回年度日历

这是一个计算税收的简短程序

boundaries = [0, 9525, 38700, 82500, 157000, 200000, 500000]
percentages = [ .10, .12,  .22, .24, .32, .35, .37]
sal = salary = 142000
bot_top = zip(boundaries, boundaries[1:]+[salary])
sal_in_brkt = (top-bot if sal>top else max(sal-bot,0) for bot, top in bot_top)
taxes = sum(pct*inbrkt for pct, inbrkt in zip(percentages, sal_in_brkt))
print(salary, taxes, salary-taxes) # ⇒ 142000 28369.5 113630.5
bot_top
生成每个纳税等级的底部和顶部极值的元组(注意,最后一个等级的顶部等于工资本身)。
sal_in_brkt
生成工资的分数,该分数包含在每个等级的顶部和底部之间。
税费
是一个括号内的工资分数乘以相应百分比的乘积之和


为了概括该过程,下面定义了一个函数
make_taxes
,该函数接受税级的
边界列表和适用于特定税级内收入的
百分比列表作为可选参数

边界列表以我们应用税收的最低收入开始(在本例中为0),以税收恒定的最大收入结束。如果我们有N个边界,考虑到大于最大值,括号的数量仍然是N,因此我们断言两个列表的长度必须相等

函数
make_taxes
最终返回一个函数,该函数返回给定薪资的税费

def make_taxes(boundaries=None, percentages=None):
    boundaries = boundaries or [0, 9525, 38700, 82500, 157000, 200000, 500000]
    percentages = percentages or [ .10, .12,  .22, .24, .32, .35, .37]
    assert len(boundaries) == len(percentages)
    def taxes(salary):
        s = salary
        pct_bot_top = zip(percentages, boundaries, boundaries[1:]+[s])
        return sum(p*(t-b if s>t else max(s-b, 0)) for p,b,t in pct_bot_top)
    return taxes

print(make_taxes()(142000)) # ⇒ 28369.5

您编写的代码甚至无法运行——它有一个语法错误<代码>&
在python中拼写为
。税括号要求在每个括号内进行计算,直到并包括您所在的最高括号。If/elif/else仅触发第一个正确匹配(最低括号)。可能重复使用,而不是所有那些
elif
。所述方法创建要应用的箱子和价格。