Python中的While循环失败

2024-09-30 16:27:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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

当我输入一个数字时,它工作得很好,但是任何其他东西都会破坏它,而不是循环它。我是缺少了一个元素,还是我只是最好的选择

^{pr2}$

Tags: to函数代码forinputrequestdef情况
3条回答

问题是input()返回作为python表达式计算的原始用户输入。因此,当你在控制台上输入类似“someinput”的内容时,会发生以下情况:

  1. 原始输入从控制台捕获为字符串
  2. 然后,该字符串被解析为一个python表达式(因此,假设您只需在程序中键入此字符串,在本例中,它将成为名为“someinput”的变量
  3. 当对此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

在python2中使用raw_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()在非整数输入上失败(这与input()在输入的字符串上调用eval()有关(请参见python builtins)。在

raw_input()没有。(实际上,input()调用raw_input()

试试这个:

while True:
    num = raw_input(request)
    if num.isdigit():
        break

isdigit()函数检查字符串中的每个字符是否为数字(“0”-“9”)

相关问题 更多 >