Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数返回以前的值_Python_Callback_Return - Fatal编程技术网

Python 函数返回以前的值

Python 函数返回以前的值,python,callback,return,Python,Callback,Return,我想让用户输入一个数字,检查它的有效性并返回它。如果数字无效,我希望重复输入过程。但是,如果我键入: “5b” “50.4” 该函数不返回50.4。相反,当执行第一个函数调用的剩余部分时,它返回5.0。如何解决上述问题,以仅获取50.4 def inputGoal (): goalFiltered = "" print ('1: ' + str(goalFiltered)) goal = input("Input number: ") for char in g

我想让用户输入一个数字,检查它的有效性并返回它。如果数字无效,我希望重复输入过程。但是,如果我键入:

  • “5b”
  • “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',',','.']
    

    如果我正确理解您的问题,我认为您可以这样做:

    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
    

    如果我正确理解您的问题,我认为您可以这样做:

    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
    

    在递归调用中,使用
    return inputGoal()
    而不仅仅是
    inputGoal()
    @smarx谢谢,它可以工作!请注意,在引入
    return
    之前,先解释一下为什么这会阻止剩余部分执行,以及为什么剩余部分会被执行。请写一个正式的答案,这样我就可以为将来的读者接受了,因为您没有
    返回值
    ,代码只是在执行递归调用(并抛出其返回值)后继续执行。完成循环后,它运行
    goalFiltered=float(goalFiltered)
    return goalFiltered
    ,因此您得到了将
    float
    应用于与列表匹配的任何字符的结果。在递归调用中,使用
    return inputGoal()
    而不仅仅是
    inputGoal()
    @smarx谢谢,它可以工作!请注意,在引入
    return
    之前,先解释一下为什么这会阻止剩余部分执行,以及为什么剩余部分会被执行。请写一个正式的答案,这样我就可以为将来的读者接受了,因为您没有
    返回值
    ,代码只是在执行递归调用(并抛出其返回值)后继续执行。循环结束后,它运行
    goalFiltered=float(goalFiltered)
    return goalFiltered
    ,这样就得到了将
    float
    应用于与列表匹配的任何字符的结果。
    continue
    在这里似乎没有任何作用。
    continue
    在这里似乎没有任何作用。