如何制作70000及以上范围的for循环?我正在为所得税进行循环,当收入超过70000时,税率为30%。我会做for income in range(income-70000)
吗?
嗯,起初我开发了一个没有使用循环的代码,它运行得很好,但后来我被通知我需要在我的代码中加入一个循环。这就是我所拥有的,但对我来说使用for循环并没有意义。有人能帮助我吗?
def tax(income):
for income in range(10001):
tax = 0
for income in range(10002,30001):
tax = income*(0.1) + tax
for income in range(30002,70001):
tax = income*(0.2) + tax
for income in range(70002,100000):
tax = income*(0.3) + tax
print (tax)
好的,我现在尝试使用while循环,但它没有返回值。告诉我你的想法。我需要根据收入计算所得税。先10000美元没有税。接下来的20000有10%。接下来40000有20%。 70000以上是30%。
def taxes(income):
income >= 0
while True:
if income < 10000:
tax = 0
elif income > 10000 and income <= 30000:
tax = (income-10000)*(0.1)
elif income > 30000 and income <= 70000:
tax = (income-30000)*(0.2) + 2000
elif income > 70000:
tax = (income - 70000)*(0.3) + 10000
return tax
答案 0 :(得分:12)
问:如何制作70000及以上范围的for循环?
答:使用itertools.count()方法:
import itertools
for amount in itertools.count(70000):
print(amount * 0.30)
问:我需要根据收入计算所得税。先10000美元没有税。接下来的20000有10%。接下来40000有20%。 70000以上是30%。
答: bisect module非常适合在范围内进行查找:
from bisect import bisect
rates = [0, 10, 20, 30] # 10% 20% 30%
brackets = [10000, # first 10,000
30000, # next 20,000
70000] # next 40,000
base_tax = [0, # 10,000 * 0%
2000, # 20,000 * 10%
10000] # 40,000 * 20% + 2,000
def tax(income):
i = bisect(brackets, income)
if not i:
return 0
rate = rates[i]
bracket = brackets[i-1]
income_in_bracket = income - bracket
tax_in_bracket = income_in_bracket * rate / 100
total_tax = base_tax[i-1] + tax_in_bracket
return total_tax
答案 1 :(得分:1)
如果你真的必须循环,一种方法是分别为每个收入单位加税:
def calculate_tax(income):
tax = 0
brackets = {(10000,30000):0.1, ...}
for bracket in brackets:
if income > bracket[0]:
for _ in range(bracket[0], min(income, bracket[1])):
tax += brackets[bracket]
return tax
答案 2 :(得分:1)
您的功能绝对不计算所需的值。你需要这样的东西:
import sys
income = 100000
taxes = [(10000, 0), (20000, 0.1), (40000, 0.2), (sys.maxint, 0.3)]
billed_tax = 0
for amount, tax in taxes:
billed_amount = min(income, amount)
billed_tax += billed_amount*tax
income -= billed_amount
if income <= 0:
break
>>> billed_tax
19000.0
答案 3 :(得分:0)
让我们从数据(levels
和pcts
)开始,并用一些值来测试这种方法(测试薪水包括括号的边界)
In [1]: salaries = [5000, 10000, 20000, 30000, 50000, 70000, 90000]
...: levels = [0, 10000, 30000, 70000]
...: pcts = [0, .1, .2, .3]
我们有一个薪水循环,我们重新设置总所得税,然后我们在薪水括号(以bottom
和{{1 }}(每个括号)和相应的征税百分比。
如果top
在下一个括号中没有收入,那么我们可以跳出内循环,否则,将当前括号中的salary-bot<=0
应用于括号中的总额,如果{ {1}}否则应包含在方括号中的工资部分中,并加到总税额中。
pct
使用生成器表达式和内置salary>top
可能没有显式的内部循环。
In [2]: for salary in salaries:
...: tax = 0
...: for pct, bottom, top in zip(pcts, levels, levels[1:]+[salary]):
...: if salary - bottom <= 0 : break
...: tax += pct*((top-bottom) if salary>top else (salary-bottom))
...: print(salary, tax)
5000 0
10000 0
20000 1000.0
30000 2000.0
50000 6000.0
70000 10000.0
90000 16000.0
答案 4 :(得分:-1)
我不知道任何python,但你的问题也不是语言。你需要阅读有关条件的内容。你不需要所有的FOR,只需1并根据你的规则做IFS。