Python中的While循环失败
我对python相当陌生(实际上通常是编码),但我基本上掌握了摆在我面前的东西。我试图创建一个只接受整数的输入,因此我将以下函数组合在一起:Python中的While循环失败,python,while-loop,Python,While Loop,我对python相当陌生(实际上通常是编码),但我基本上掌握了摆在我面前的东西。我试图创建一个只接受整数的输入,因此我将以下函数组合在一起: def askFor(request): """Program asks for input, continues to ask until an integer is given""" num = ' ' while (isinstance(num, int) == False): num = input(reques
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: '))
在Python2中使用
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 ...
在Python2中使用
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 ...
这是因为
input()
raw\u input()
没有。(实际上,input()
调用raw\u input()
)
请尝试以下方法:
while True:
num = raw_input(request)
if num.isdigit():
break
isdigit()
函数检查字符串中的每个字符是否为数字('0'-'9')这是因为input()
在非整数输入上失败(这与input()
正在对输入的字符串调用eval()
有关(请参阅)
raw\u input()
没有。(实际上,input()
调用raw\u input()
)
请尝试以下方法:
while True:
num = raw_input(request)
if num.isdigit():
break
isdigit()
函数检查字符串中的每个字符是否都是数字('0'-'9')问题在于input()
返回原始用户输入,作为python表达式计算。因此,当您在控制台上输入类似“someinput”的内容时,会发生以下情况:
原始输入作为字符串从控制台捕获
然后将该字符串解析为python表达式(因此,假设您只需在程序中键入该字符串,在本例中,它将成为名为“someinput”的变量)
在此python表达式上调用isinstance()时,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
问题是input()
返回原始用户输入,作为python表达式进行计算。因此,当您在控制台上输入类似“someinput”的内容时,会发生以下情况:
原始输入作为字符串从控制台捕获
然后将该字符串解析为python表达式(因此,假设您只需在程序中键入该字符串,在本例中,它将成为名为“someinput”的变量)
在此python表达式上调用isinstance()时,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
首先,如果缩进有点过大(while
循环的缩进级别与前面的级别不匹配)
另一种方法是:
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
首先,如果缩进有点过大(while循环的缩进级别与前面的级别不匹配) 另一种方法是:
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
input
将任何键入的内容作为Python代码进行计算,因此,如果用户键入一些不敏感的内容,就会产生错误。或者更糟糕的是,它可以在您的计算机上运行任意命令。通常,您希望使用raw\u input
并转换它安全返回的字符串值。在这里,您只需要调用int
on字符串,如果用户输入非int,仍然会产生错误,但我们可以通过循环来处理
瞧
def read_int(request):
while True:
try:
return int(raw_input(request))
except ValueError:
pass
注意,没有必要使用
break
或else
;只要在成功解析后返回值!input
对键入的Python代码进行求值,因此如果用户键入一些不敏感的内容,就会产生错误。或者更糟糕的是,它可以在您的计算机上运行任意命令。通常,您需要使用raw\u input
并转换它安全返回的字符串值。在这里,您只需调用字符串上的int
,如果用户输入非int,这仍然会产生错误,但我们可以通过循环来处理
瞧
def read_int(request):
while True:
try:
return int(raw_input(request))
except ValueError:
pass
注意,不需要<代码>破解< /代码>或<代码>否则>代码>;只要成功解析它,就返回值!我正处于编写完全相同的东西的中间!但是无论如何,您可以考虑在Python 2代码>输入< /代码>中以Python代码评估输入,而<>代码> RWYPixe< /Cord>返回一个STRIN。G.Wrror,你可以考虑提到……我的想法完全正确:这对我剩下的代码似乎不起作用。每当我输入一个非整数时,它会接受它,而不是再次请求相同的数据,然后中断。