函数返回以前的值

问题描述:

我想将用户输入作为数字,检查其有效性并将其返回。如果该号码无效,我希望重复输入过程。但是,如果我输入:函数返回以前的值

  1. "5b"
  2. "50.4"

的函数不返回50.4。相反,它返回5.0,因为执行第一个函数调用的其余部分。我如何解决上述问题,只能得到50.4

def inputGoal(): 
    goalFiltered = "" 
    print ('1: ' + str(goalFiltered)) 
    goal = input("Input number: ") 

    for char in goal: 
     matched = False 
     for sign in comparator: 
      if (sign == char): 
       matched = True 
       if (char != ','): 
        goalFiltered += sign 
       elif (char == ','): 
        goalFiltered += '.' 
     if (matched == False): 
      print ("Please repeat input, valid characters are: 0 1 2 3 4 5 6 7 8 9 , .") 
      inputGoal() 
      #return 
    goalFiltered = float(goalFiltered) 
    return (goalFiltered) 

比较变量是:

comparator = ['0','1','2','3','4','5','6','7','8','9',',','.'] 
+2

在你的递归调用,使用'返回inputGoal( )'而不是'inputGoal()'。 – smarx

+0

@smarx **谢谢,它的工作原理!**介绍解释,为什么这会阻止**余数**执行,并且为什么余数在引入'return'之前首先被执行。请写一个正式的答案,以便将来的读者可以接受 – Alexander

+1

由于您没有'return',所以代码在递归调用(并抛出它的返回值)后才执行。一旦它完成循环,它会运行'goalFiltered = float(goalFiltered)'和'return goalFiltered',所以你得到了将'float'应用于与你的列表匹配的任何字符的结果。 – smarx

如果我明白你的问题正确,我觉得你可以这样做:

while True: 
    ask = input("Input the number:\t") #The \t just puts a tab so it looks nice 
    if ask == float(ask): 
     break 
    else: 
     print("The number is incorrect. Try again.") 
     continue 
+0

“继续”在这里似乎没有做任何事情。 – smarx