我的税务计算器程序出了什么问题?

时间:2015-05-26 23:06:38

标签: python

def taxcalc (tax):

    income = float(raw_input('Welcome to the PAYG Tax calculator,please enter your gross income, and your net income will be displayed.\n'))

    if income <= 18200:
        print income

    elif income >= 18201 and income <= 37000:
        beforetax1 = income * 0.19
        tax = income - beforetax1

    elif income >= 37001 and income <= 80000:
        beforetax2 = income - 3572
        secondtax = beforetax2 * 0.325
        tax = income - secondtax

    elif income >= 80001 and income <= 180000:
        beforetax3 = income - 17547
        thirdtax = beforetax3 * 0.37
        tax = income - thirdtax

    elif income >= 180001:
        beforetax4 = income - 54547
        fourthtax = beforetax4 * 0.45
        tax = income - fourthtax

print 'Your net pay is $',tax

print 'The amount of tax paid is $',beforetax
除了税,它不会打印任何内容。

(编辑)

def taxcalc ():

    income = decimal.Decimal(raw_input('Welcome to the PAYG Tax calculator, please enter your gross income, and your net income will be displayed.\n'))

    if income <= 18200:
        net = income

    elif income > 18200 and income <= 37000:
        tax = income * 0.19
        net = income - tax

    elif income > 37000 and income <= 80000:
        tax = income - 3572
        tax = tax * 0.325
        net = income - tax

    elif income > 80000 and income <= 180000:
        tax = income - 17547
        tax = tax * 0.37
        net = income - tax

    elif income > 180000:
        tax = income - 54547
        tax = tax * 0.45
        net = income - tax

    print "Your net income is $",net

taxcalc()

1 个答案:

答案 0 :(得分:2)

这里有一大堆问题,你必须解决所有这些问题,包括至少以下内容:

  • 您的taxcalc函数有时print是一个值,有时会计算一些临时值,然后忘记它们并且什么都不做;从来没有做过的事情实际上是return给调用者的价值,例如return tax, beforetax1
  • 您的taxcalc函数会使用不使用的tax参数。它不应该。
  • 您定义了一个taxcalc函数,但绝不会在任何地方调用,因此它没有任何好处。您需要tax, beforetax = taxcalc()
  • 之类的内容
  • 您的变量名称具有误导性。你有一个名为tax的东西,它是净工资而不是税,以及一个名为beforetax的东西,它是纳税额而不是税前收入。同样,beforetax1实际上是税,而不是税前收入,而beforetax2是税前收入,secondtax是税,tax是后税-tax income。
  • 你的elif界限都有差距。例如,如果某人制作$18200.50,那不是<= 18200,也不是>= 18201。你实际上并不需要每个测试的下半部分;只需执行elif income <= 37000(如果是<= 18200,它就已经在if处理,因此无法进行此测试。)
  • 您的第一个案例,对于最低应纳税所得额的人,需要做与其他人相同的事情:计算并返还税收成本和税前收入(在这种情况下,只是return 0, income) 。你不能只做没有,或者当有人想要这些价值并且它们不存在时,你会在某个地方得到某种例外。此外,只是打印收入没有任何用处。

还有一些事实上没有被破坏,但应该改进:

  • 最好将raw_input 移到函数之外,然后将收入作为参数传递。
  • 没有理由在一个区块中命名变量beforetax2而在另一个区块中命名beforetax3。如果他们两个意思相同,并且他们无法相互接触,只需将它们称为beforetax
  • 您可能希望舍入到甚至美分 - 或者可能使用decimal.Decimal而不是float(请参阅文档中的moneyd`食谱)。 *

*我不知道澳大利亚,但在美国,如果美国国税局搞砸了并以17.3811713美元的价格向您发送税单,那你就麻烦大了。支付17.38美元,这是支付不足,他们将发布处罚;支付17.39美元,但未明确说明您支付过高费用,他们将退还您的支票,然后罚款,因为您没有按时付款。打电话给他们,他们会告诉你这不是问题,然后三个月后,他们因为不支付0.11713美分而以288美元的价格装修你的工资,他们告诉你“我们给你的信息实际上并不能保证是是正确的,并不合法地作为建议“。