说我想创建一个函数,要求用户输入浮点数据。程序检查输入是否为浮点型,如果不是,则返回到开头,如果是,则返回数据,使函数结束。可以很好地检查数据类型,也可以检查数据是否为浮动数据,但是如果我先输入无效数据然后输入有效数据,则会出现错误。
def function1():
try:
data1 = float(input("Please type in pi with its first 2 digits"))
status = 1
except ValueError:
status = 0
if status == 0:
print("Please enter a valid answer.")
function1()
else:
return data1
x = float(function1())
if x == 3.14:
print("Correct!")
else:
print("Incorrect, please try again.")
function1()
它给我的错误是:
TypeError:float()参数必须是字符串或数字,而不是 “ NoneType”
再次注意。仅当我第一次输入无效数据(例如“否”)然后输入有效数据(3.14、2.71等)时,才会发生这种情况。否则,“程序”可以正常工作。
答案 0 :(得分:1)
您应该返回 function1
,例如:
def function1():
try:
data1 = float(input("Please type in pi with its first 2 digits"))
status = 1
except ValueError:
status = 0
if status == 0:
print("Please enter a valid answer.")
return function1()
# ^^^^ Here
else:
return data1
这也使函数递归。如果您没有return
使用某个功能,则None
会自动返回。
另外,您正在捕获异常,因此您应该从那里进行递归:
def function1():
try:
data1 = float(input("Please type in pi with its first 2 digits"))
except ValueError:
print("Please enter a valid answer.")
return function1()
# ^^^^ Here
else:
return data1
这也删除了多余的status
以跟踪有效性。
顺便说一句,Python没有尾部调用优化功能,因此使用递归时可以达到最大堆栈大小。
答案 1 :(得分:0)
您没有从递归函数返回,因此您得到了None
if status == 0:
print("Please enter a valid answer.")
return function1()