您好我在python中创建的函数有这个问题:
def intcheck(num)
if isinstance(num, int):
return num
else:
intcheck(input("Invalid datatype: Input integer only: "))
它应该检查输入是否是一个整数,如果它不是,请询问用户另一个输入,然后检查一个,等等。等。
然而,代码似乎停留在else:语句上,这样即使正确的输入也不会返回,它只会无限期地请求另一个输入。
答案 0 :(得分:1)
更简单的方法是:
def is_int(foo):
try:
return int(foo)
except ValueError:
print('{} is not a number'.format(foo))
return is_int(input('Please enter a number: '))
如果您使用的是Python 2,请确保使用raw_input
代替input
。
答案 1 :(得分:1)
如果您使用的是Python 3.x,input()
会返回一个字符串,因此您必须将其转换为int。如果您使用的是Python 2.x,那么真的应该使用raw_input()
代替(Python 2.x input()
非常不安全),并且raw_input()
与Python 3.x input()
相同,您还必须将字符串转换为int。
在这两种情况下,您需要在else
子句中返回递归调用的结果,如其他答案所示。
现在以这种方式使用递归,虽然可能是“优雅”,但这不是最简单的解决方案 - 一个好的旧循环工作正常并避免堆叠帧(Python不进行尾递归优化):
def checkint():
while True:
num = input("your prompt here")
try:
return int(num)
except ValueError:
print "'{}' is not a valid integer".format(num)
答案 2 :(得分:0)
您忘记了input
函数返回str
个对象!所以,你永远循环在intcheck
函数的else中。相反,你可以这样做:
def intcheck(num):
if isinstance(num, int):
return num
else:
input_string = input("Invalid datatype: Input integer only: ")
try:
input_int = int(input_string)
except ValueError:
input_int = input_string
finally:
intcheck(input_int)
答案 3 :(得分:0)
Python中的输入始终作为字符串加载,因此首先,您需要将输入转换为一个。优雅的方法是检查它是否有异常:如果是int
,则返回它,如果没有,请求另一个输入。
def intcheck(num):
try:
return int(num)
except ValueError:
return intcheck(input("That is not a integer, please enter integer: "))