我是python的新手(一般编码),但我主要掌握摆在我面前的东西。我正在尝试创建一个只接受整数的输入,所以我将以下函数放在一起:
def askFor(request):
"""Program asks for input, continues to ask until an integer is given"""
num = ' '
while (isinstance(num, int) == False):
num = input(request)
else:
return num
当我输入一个数字时它工作正常,但是其他任何东西都会破坏它而不是将它循环回来。我错过了一个元素,或者我最好还是选择
str(input('wargharble: '))
答案 0 :(得分:4)
你在Python 2中使用raw_input
更安全,因为它总会返回一个字符串,而input
会尝试评估给定的字符串,这很危险。
def askFor(prompt):
""" ask for input, continues to ask until an integer is given
"""
number = None
while True:
try:
number = int(raw_input(prompt))
break
except ValueError:
pass # or display some hint ...
print(number) # or return or what you need ...
答案 1 :(得分:0)
这是因为input()
在非整数输入上失败(这与input()
在您输入的字符串上调用eval()
的事实有关(参见python builtins })。
raw_input()
没有。 (事实上,input()
会调用raw_input()
)
请改为尝试:
while True:
num = raw_input(request)
if num.isdigit():
break
isdigit()
函数检查字符串中的每个字符是否为数字('0' - '9')
答案 2 :(得分:0)
问题是input()
返回被评估为python表达式的原始用户输入。因此,当您在控制台上输入类似“someinput”的内容时,会发生以下情况:
您真正想要做的是使用raw_input()
,这将返回表示用户输入的字符串。既然您现在从控制台接收字符串,则需要某种方法来检查字符串是否为int(因为isinstance将始终返回字符串)
现在要确定字符串是否为数字,你可以使用像isdigit()这样的东西 - 但要小心 - 这个函数将验证任何只包含数字的字符串(所以0393有效)。
以下是需要进行的更正:
def askFor(request):
"""Program asks for input, continues to ask until an integer is given"""
num = ' '
while (num.isdigit() == False):
num = raw_input(request)
else:
return num
答案 3 :(得分:0)
首先,如果有点关闭你的缩进(while
循环的缩进级别与前一级别不匹配)。
def askFor(request):
"""Program asks for input, continues to ask until an integer is given"""
num, isNum = '', False # multiple assignment
while not isNum:
num = input(request)
if type(num) in (int, long): # if it is any of these
isNum = True
break
else: isNum = False
return num # at the end of the loop, it will return the number, no need for an else
另一种方法:
def askFor(request):
"""Program asks for input, continues to ask until an integer is given"""
num, isNum = '', False
while not isNum:
num = raw_input(request)
try: # try to convert it to an integer, unless there is an error
num = int(num)
isNum = True
break
except ValueError:
isNum = False
return num
答案 4 :(得分:0)
input
评估Python代码中输入的内容,因此如果用户输入非敏感内容,则会产生错误。或者更糟,它可以在您的计算机上运行任意命令。通常,您希望使用raw_input
并转换它自己安全返回的字符串值。在这里,你只需要在字符串上调用int
,如果用户输入非int,它仍然会产生错误,但我们可以通过循环来处理它。
瞧:
def read_int(request):
while True:
try:
return int(raw_input(request))
except ValueError:
pass
注意,不需要break
或else
;只要你成功解析它就返回值!