我正在编写这段代码,用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...