如何 return 布尔值使用 if/elif 检查来运行和评估?

How to return boolean value to function and evaluate with an if/elif check?

# v1.0#
#######
import time


#Definitions#

def StartOrNah():
    print#Newline
    time.sleep(0.5)
    print("To begin, type 'start' or to exit type 'exit'...")
    time.sleep(0.6)
    sorn = str(raw_input("--> ")).lower()
    if sorn == str("start"):
        return True
    elif sorn == str("exit"):
        return False
    else:
        print#Newline
        print("That is not valid, please try again.")
        StartOrNah()

def program():
    print#Newline
    print("The main program function has been invoked.")


#Calls#
StartOrNah()
if StartOrNah:
    program()
elif StartOrNah:
    print#Newline
    print("The program will now exit...")
    time.sleep(3)

我的目标是 return StartOrNah 函数的布尔值,并使用 if 检查来查看结果是 True 还是 False。我已经尝试了几种方法,但我永远无法在评估中识别出 False 。我觉得我做的功能非常错误。

如果答案保持半简单,我将不胜感激,因为我对这门语言有点陌生。

问题是您没有 return 来自递归的值。在该子句中添加一个词:

else:
    print#Newline
    print("That is not valid, please try again.")
    return StartOrNah()

我也是新手...

所以如果你说:

if StartorNah():
    pass

您正在尝试查看它是否 True。如果您想查看它是否是 False,请使用:

if not StartorNah():
    print#Newline
    print("The program will now exit...")
    time.sleep(3)

您还可以使用 else 语句,如果不满足其他 ifelif 语句的条件,将使用该语句:

else:
    print#Newline
    print("The program will now exit...")
    time.sleep(3)

如评论中所述,尝试使用 StartorNah() 而不是 StartorNah

共有三个问题,但似乎没有任何答案可以正确地涵盖所有问题,所以开始吧。在此片段中:

else:
    print#Newline
    print("That is not valid, please try again.")
    StartOrNah()

通过省略关键字 return,您可以确保 StartOrNah() 将被调用,但其结果将丢失并且调用者(原始 StartOrNah)将简单地 return None 因为执行的最后一条语句没有 return。 None 将在 if 语句中被视为 False。您需要在最后一行前面添加 return

为了演示这一点,运行 这个小程序:

def foo():
    3

print foo()

def bar():
    return 3

print bar()

在此代码段中:

#Calls#
StartOrNah()
if StartOrNah:
    program()

当您说 if StartOrNah 时,您是在询问对象 StartOrNah 是一个函数 是否等同于 True,它被误导(它总是会)。调用 StartOrNah() returns 一个你应该保留并用它做某事的值,就像你应该 return 它上面一样。这并不意味着您应该通过引用函数名称来询问结果是什么。相反,你需要做这样的事情:

result = StartOrNah()
if result:
    program()

为了帮助您理解,我建议还添加两行,如下所示:

result = StartOrNah()
print("result:", result)
print("StartOrNah:", StartOrNah)
if result:
    program()

您应该看到 resultTrueFalseStartOrNah 是一个函数。

接下来,在这个片段中:

if StartOrNah:
    program()
elif StartOrNah:
    print#Newline

如果 StartOrNahFalse 那么这两个块都不会被执行。使用 else 而不是 elif 因为 elif 仍然要求给定的条件为真(因此包含 if)这显然不是这种情况,因为原始 if 只是表明它是错误的。另一方面,当匹配的 if(和任何 elifs)未被执行时,else 总是被执行。

除非所有这些问题都得到解决,否则我希望该程序不会像您想象的那样工作。

由于您对函数的工作方式有些困惑,我强烈建议您暂时远离递归(即在 StartOrNah() 内调用 StartOrNah()),因为这只会让事情变得更加混乱和困难。尝试一些简单的玩具程序来提高您对基本概念的理解。