# 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。我已经尝试了一些方法,但我永远不会在评估中被识别出来。我觉得我的功能非常糟糕。
如果答案保持简单,我会很感激,因为我对这门语言有点新鲜。
答案 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
您应该看到True
是False
或StartOrNah
而if StartOrNah:
program()
elif StartOrNah:
print#Newline
是一个函数。
接下来,在此代码段中:
StartOrNah
如果False
为else
,那么两个块都不会被执行。使用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)
语句,如果不符合其他else
和if
语句的条件,则会使用该语句:
elif
正如评论中所述,请尝试使用else:
print#Newline
print("The program will now exit...")
time.sleep(3)
代替StartorNah()
。