如何将boolean值返回到function并使用if / elif检查进行评估?

时间:2015-09-24 23:09:06

标签: python function python-3.x boolean-logic

# 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)

我的目标是将一个布尔值返回给StartOrNah函数,并使用if检查来查看结果是True还是False。我已经尝试了一些方法,但我永远不会在评估中被识别出来。我觉得我的功能非常糟糕。

如果答案保持简单,我会很感激,因为我对这门语言有点新鲜。

3 个答案:

答案 0 :(得分:1)

有三个问题,似乎没有任何答案正确地覆盖它们,所以这里有。在这个片段中:

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

通过省略关键字return,您确保将调用StartOrNah(),但其结果将会丢失,并且调用方(原始StartOrNah)将只返回None因为最后一个执行的语句没有返回。然后None会在False声明中将if视为return。您需要将def foo(): 3 print foo() def bar(): return 3 print bar() 添加到最后一行。

为了证明这一点,请运行这个小程序:

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

在此片段中:

if StartOrNah

当你说StartOrNah时,你问对象True是一个函数,是否等同于StartOrNah(),这是错误的(它始终是将会)。调用return会返回一个您应该保留的值并执行某些操作,就像上面应该result = StartOrNah() if result: program() 一样。这并不意味着你应该通过引用函数的名称来询问结果是什么。相反,你需要做这样的事情:

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

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

result

您应该看到TrueFalseStartOrNahif StartOrNah: program() elif StartOrNah: print#Newline 是一个函数。

接下来,在此代码段中:

StartOrNah

如果Falseelse,那么两个块都不会被执行。使用elif代替elif,因为if仍然要求给定的条件为真(因此包含if),这显然不是原始的else {1}}只是表明这是假的。另一方面,在未执行匹配的if(以及任何elif s)时,始终会执行StartOrNah()

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

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

答案 1 :(得分:0)

问题是您没有从递归中返回值。在该子句中添加一个单词:

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

答案 2 :(得分:0)

我也是一个新手......

所以,如果你说:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <thead>
    <tr>
      <th>Column 1</th>
      <th>Column 2</th>
      <th>Column 3</th>
      <th>Column 4</th>
      <th>Column 5</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Row 1</td>
      <td>Row 1</td>
      <td>Row 1</td>
      <td>Row 1</td>
      <td>Row 1</td>
    </tr>
    <tr>
      <td>Row 2</td>
      <td>Row 2</td>
      <td>Row 2</td>
      <td>Row 2</td>
      <td>Row 2</td>
    </tr>
    <tr>
      <td>Row 3</td>
      <td>Row 3</td>
      <td>Row 3</td>
      <td>Row 3</td>
      <td>Row 3</td>
    </tr>
    <tr>
      <td>Row 4</td>
      <td>Row 4</td>
      <td>Row 4</td>
      <td>Row 4</td>
      <td>Row 4</td>
    </tr>
    <tr>
      <td>Row 5</td>
      <td>Row 5</td>
      <td>Row 5</td>
      <td>Row 5</td>
      <td>Row 5</td>
    </tr>
    <tr>
      <td>Row 6</td>
      <td>Row 6</td>
      <td>Row 6</td>
      <td>Row 6</td>
      <td>Row 6</td>
    </tr>
    <tr>
      <td>Row 7</td>
      <td>Row 7</td>
      <td>Row 7</td>
      <td>Row 7</td>
      <td>Row 7</td>
    </tr>
    <tr>
      <td>Row 8</td>
      <td>Row 8</td>
      <td>Row 8</td>
      <td>Row 8</td>
      <td>Row 8</td>
    </tr>
    <tr>
      <td>Row 9</td>
      <td>Row 9</td>
      <td>Row 9</td>
      <td>Row 9</td>
      <td>Row 9</td>
    </tr>
    <tr>
      <td>Row 10</td>
      <td>Row 10</td>
      <td>Row 10</td>
      <td>Row 10</td>
      <td>Row 10</td>
    </tr>
  </tbody>
</table>

您正试图查看它是否为if StartorNah(): pass 。如果您想查看它是否为True,请使用:

False

您还可以使用if not StartorNah(): print#Newline print("The program will now exit...") time.sleep(3) 语句,如果不符合其他elseif语句的条件,则会使用该语句:

elif

正如评论中所述,请尝试使用else: print#Newline print("The program will now exit...") time.sleep(3) 代替StartorNah()