While循环不起作用-为确定所得税而编写的代码



我正在编写这段代码,用Python计算所得税。

while循环不工作。有人能在这个代码中找到错误吗?

database1 = ["bob","cic","dod","viv","gog"]
def incometax(r):
    nam = input("Please provide your name: ")
# if database1.find(nam) == "true":
    if nam in database1:
       counter = 0
       while counter < 1:
         try:
            r = input("Please provide your income details: ")
            counter += 1
            if r > 500000:
                if r > 600000:
                    if r > 700000:
                        if r > 800000:
                            return str('Rs.') + str(int((r - 800000)*.3)) + str(' is your income tax')
                        return str('Rs.') + str(int((r - 700000)*.25)) + str(' is your income tax')
                    return str('Rs.') + str(int((r - 600000)*.2)) + str(' is your income tax')
                return str('Rs.') + str(int((r - 500000)*.1)) + str(' is your income tax')
            else:
                return('You are exempt from Income tax')
         except:
            counter == 0
            return("Please do not type in special character")

        # print(counter)
    else:
      return('Your name is not in the records')
    print(incometax("r"))

您可能希望通过以下方式将input()的结果强制为一个数字:

r = float(input("Please provide your income details: "))

此外,为了澄清一下,您的循环似乎只设置为运行一次。这就是你的意图?

也许您的意图是,在"except"中,函数一直在询问值。不幸的是,这不会发生,因为您有一个返回,这将使while循环退出

您的代码有几个问题。

第一眼,我看到:

  • if database1.find(nam) == "true":这永远不会发生。布尔表达式的结果从来都不是字符串。您可以将其与值True进行比较,但也可以完全省略比较并编写if database1.find(nam):。但这并不重要,因为您使用了替代(更好)if nam in database1
  • 不需要counter。如果一有确定的结果(无论是否有效)就立即return,那么也可以有一个while True:循环,它将永远循环,除非它从内部终止(发生在return和其他事件上)
  • 不要在except子句中返回-这似乎是您最初的问题一旦您返回,您就离开了while循环,它似乎功能失调
  • 如果您使用的是Python3,那么r将变成一个字符串。你应该让它通过float()把它变成一个浮子。在Python 2上,您所做的工作是有效的,但这是一个安全漏洞。最好改为float(raw_input(...))
  • 您传递的参数r和参数"r"都是无用的
  • 不应使用except:。相反,只捕获您期望的异常
  • str('whatever')毫无意义;CCD_ 19已经是CCD_
  • 您正在返回函数中的一个字符串,该函数应计算所得税。这是有效的,但不是好的编程。最好返回值本身,并让调用方处理处理。

    你可以这样做:

    import sys
    if sys.version < (3, 0):
        input_function = raw_input
    else:
        input_function = input
    def tax_from_income(r):
        if r > 800000:
            return int((r - 800000)*.3)
        elif r > 700000:
            return int((r - 700000)*.25)
        elif r > 600000:
            return int((r - 600000)*.2)
        elif r > 500000:
            return int((r - 500000)*.1)
        else:
            return 0
    def incometax():
        nam = input("Please provide your name: ")
        if nam in database1:
            while True:
                try:
                    r = float(input_function("Please provide your income details: "))
                    tax = tax_from_income(r)
                    if tax > 0:
                        return 'Rs.' + str(tax) + ' is your income tax'
                    else:
                        return 'You are exempt from Income tax'
                except ValueError:
                    print("Please do not type in special character")
                    # while loop is continued here...
    

最新更新