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

0 投票
4 回答
13165 浏览
提问于 2025-04-17 22:38

我有一个函数,它是我大主函数的一部分。我希望这个函数在每次被调用时,检查用户输入的内容是否是一个数字。如果是数字,就返回这个数字并结束函数。如果不是数字,我希望它能不断循环,直到输入一个数字为止。但是当我尝试运行它时,出现了意想不到的错误:

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:

4 个回答

0

以下的解决方案在我的电脑上可以正常运行,尽管我用的是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_input而不是input,因为raw_input会直接给你用户输入的字符串,而input会试图去计算这个文本。(如果你把12传给input,你会得到数字12,但如果你传"12",你会得到字符串'12'。而如果你传my_var,你会得到my_var里存的值。)

另外,你还应该知道isdigit()这个函数会检查一个字符串是否只包含数字,并且至少有一个字符——这和isNumber()是不一样的。例如,"123".isdigit()会返回True,但"123.0".isdigit()会返回False。我还稍微简化了一下你的循环逻辑。

0

在你赋值的时候,你用了 keepgoing == True,我觉得应该用 keepgoing=True

0

你不需要最后一行:

elif keepgoing==True:

它在等待文件中:后面的内容。

顺便说一下,第一部分应该用一个=,而且可以写得更简单。

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

因为你在while循环里面,它会一直执行下去。使用return会结束这个while循环,break也可以,甚至会退出程序。不过每次它都会等待input

2

这里有一个更简洁明了的做法,跟你现在做的差不多:

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

这就是你需要的,额外的变量是多余的,最后的 elif 也没有意义。你不需要用 == True== 1 来检查布尔值,只需用 if condition: 就可以了。而且在 return 之后什么都不会发生,你的 break 是永远不会被执行的。

撰写回答