在while循环中检查用户输入的数字
我有一个函数,它是我大主函数的一部分。我希望这个函数在每次被调用时,检查用户输入的内容是否是一个数字。如果是数字,就返回这个数字并结束函数。如果不是数字,我希望它能不断循环,直到输入一个数字为止。但是当我尝试运行它时,出现了意想不到的错误:
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 个回答
以下的解决方案在我的电脑上可以正常运行,尽管我用的是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。我还稍微简化了一下你的循环逻辑。
在你赋值的时候,你用了 keepgoing == True
,我觉得应该用 keepgoing=True
。
你不需要最后一行:
elif keepgoing==True:
它在等待文件中:
后面的内容。
顺便说一下,第一部分应该用一个=
,而且可以写得更简单。
def getnumber():
while True:
number = input("input number: ")
result1 = number.isdigit()
if result1:
return number
因为你在while循环里面,它会一直执行下去。使用return
会结束这个while循环,break
也可以,甚至会退出程序。不过每次它都会等待input
。
这里有一个更简洁明了的做法,跟你现在做的差不多:
def getnumber():
while True:
number = input("Input number: ")
if number.isdigit():
return number
这就是你需要的,额外的变量是多余的,最后的 elif
也没有意义。你不需要用 == True
或 == 1
来检查布尔值,只需用 if condition:
就可以了。而且在 return
之后什么都不会发生,你的 break
是永远不会被执行的。