Python 3.x 为什么while循环可以工作,而if语句不能返回我的值?

Python 3.x 为什么while循环可以工作,而if语句不能返回我的值?,python-3.x,Python 3.x,我是一名新的python程序员,我似乎无法理解为什么下面的代码使用while循环而不是if语句: 代码1 def getAltitude(): altitude_prompt = int(input(("Enter the initial altitude(in meters): ")) if 1 > altitude_prompt or altitude_prompt > 9999: print("Altitude m

我是一名新的python程序员,我似乎无法理解为什么下面的代码使用while循环而不是if语句:

代码1

def getAltitude():

    altitude_prompt = int(input(("Enter the initial altitude(in meters): "))
    if 1 > altitude_prompt or altitude_prompt > 9999:
        print("Altitude must be present between 1 and 9999, inclusive, please try again")
        getAltitude()
    return (altitude_prompt)
代码2

def getAltitude():

    while True:
        altitude_prompt = float(input("Enter the initial altitude(in meters): "))
        if 1 > altitude_prompt or altitude_prompt > 9999:
            print("Altitude must be present between 1 and 9999, inclusive, please try again")
        else:
                break       

    return(altitude_prompt)         
正如您所看到的,这两个代码非常相似,除了在代码1中,如果我输入负数,提示将重新启动,但只保存负数。意思是如果我先输入-3,-3被保存。即使我用正数5来修正它,当函数重新编译时,函数仍然返回-3

然而,第二个代码可以完全正常工作。如果我输入一个负数,-3,它会重定向提示,直到我输入一个正数5,它会保存5,而不像代码1那样保存-3


我只是好奇为什么会这样。是因为我在函数内部调用函数吗?

您应该返回递归调用的返回值:

def getAltitude():
    altitude_prompt = int(input(("Enter the initial altitude(in meters): ")))
    if 1 > altitude_prompt or altitude_prompt > 9999:
        print("Altitude must be present between 1 and 9999, inclusive, please try again")
        altitude_prompt = getAltitude()
    return (altitude_prompt)

谢谢你的帮助!我该怎么做?哦,是的,我刚注意到。谢谢,但是你能解释一下为什么它是这样工作的吗?如果不将递归调用的返回值赋给变量,你只需丢弃它,让
altitude\u提示符
保留用户首先输入的原始值。