python在while循环中检查用户输入的数字

python在while循环中检查用户输入的数字,python,python-3.x,Python,Python 3.x,我在下面有一个函数,它是我的主要大函数的一部分,我想让这个函数做的是,无论何时调用,我想让函数检查用户输入是否正确 有没有数字。如果它是一个数字,它将返回该数字并中断。 但如果它不是一个数字,我希望它一次又一次地循环 运行它,它会给我一个意外错误: unexpected eof while parsing 任何人都能帮我找到我缺少的东西,或者我应该如何重新安排我的代码吗?谢谢大家! def getnumber(): keepgoing==True while keepgoin

我在下面有一个函数,它是我的主要大函数的一部分,我想让这个函数做的是,无论何时调用,我想让函数检查用户输入是否正确 有没有数字。如果它是一个数字,它将返回该数字并中断。 但如果它不是一个数字,我希望它一次又一次地循环 运行它,它会给我一个意外错误:

unexpected eof while parsing 
任何人都能帮我找到我缺少的东西,或者我应该如何重新安排我的代码吗?谢谢大家!

def getnumber():
    keepgoing==True
    while keepgoing:
        number = input("input number: ") 
        result1 = number.isdigit()

        if result1 == 1:
            return number
            break
        elif keepgoing==True:

您不需要最后一行:

elif keepgoing==True:
它在
之后等待文件的其余部分

旁注,在第一部分中,它应该是一个单独的
=
,也可以编写得更简单

def getnumber():
    while True:
        number = input("input number: ")
        result1 = number.isdigit()
        if result1:
            return number

由于您在while循环中,它将继续执行。使用
return
将结束while循环,
break
ing并退出程序。不过,每次它都会等待
输入

一个更整洁、更清晰的方法来做你已经在做的事情:

def getnumber():
    while True:
        number = input("Input number: ")
        if number.isdigit():
            return number

这就是您所需要的,额外的变量是多余的,最后的
elif
没有意义。您不需要用
==True
==1
检查布尔值,只要在条件为
时执行
。在
返回后不会发生任何事情,您的
中断将永远无法到达

当您使用
keepgoing==True
时,我认为应该是
keepgoing=True

以下解决方案在我的机器上运行,尽管我运行的是Python 2.7

def get_num():
    while True: #Loop forever
        number_str = raw_input("> Input a number: ") #Get the user input
        if number_str.isdigit(): #They entered a number!
            return int(number_str) #Cast the string to an integer and return it
我使用了
raw\u input
而不是
input
,因为
raw\u input
提供了用户输入的确切字符串,而不是像
input
那样尝试计算文本。(如果您将
12
传递给
input
,您将得到数字12,但是如果您传递
“12”
,您将得到字符串
'12'
。如果您传递
my\u var
,您将得到
my\u var
中的任何值)


无论如何,您还应该知道,
isdigit()
返回字符串中是否只有数字和至少一个字符-这与isNumber()不同。例如,
“123”.isdigit()
为真,但
“123.0”.isdigit()
为假。我还简化了您的循环逻辑

Python的哪个版本?就这些吗?当我删除最后一个时,它并没有要求我输入。