Python中的While循环失败

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

我对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: '))

在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,你可以考虑提到……我的想法完全正确:这对我剩下的代码似乎不起作用。每当我输入一个非整数时,它会接受它,而不是再次请求相同的数据,然后中断。