我有一个下面的函数是我的主要函数的一部分,我希望这个函数做的是每当调用时,我希望函数检查用户输入是否是 一个数字与否。如果是数字,它将返回数字并中断。 但如果它不是一个数字,我希望它一次又一次地循环。当我尝试时 运行它,它给了我意想不到的错误:
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:
答案 0 :(得分:1)
更整洁,更清楚你要做的事情:
def getnumber():
while True:
number = input("Input number: ")
if number.isdigit():
return number
这就是你所需要的,额外的变量是多余的,最后的elif
是没有意义的。您无需使用== True
或== 1
检查布尔值,只需执行if condition:
即可。 return
之后没有任何事情发生,您的break
永远不会到达。
答案 1 :(得分: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 :(得分:0)
在分配您使用keepgoing == True
时,我认为它应该是keepgoing=True
答案 3 :(得分: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。我还简化了你的循环逻辑。