我想返回变量aRoll
,并将其用作下一个函数的参数。在这种情况下,aRoll
会回答问题"让我们提高你的能力分数。准备? (Y / N)"一旦问题得到解答,原始输入就会存储在变量aRoll
中并返回。
import random
pAbility = ['Str', 'Dex', 'Con', 'Int', 'Wis', 'Cha']
pScore = []
i = 0
def pQuestion():
aRoll = raw_input("Let's roll your ability scores. ready? (y/n)")
if aRoll not in ('y', 'n'):
print "Please type 'y' or 'n'"
return pQuestion()
else:
return aRoll
def pStats(aRoll):
while aRoll == "y":
while i < 6:
pScore.append(random.randint(7, 18))
i = i + 1
for score, ability in zip(pAbility, pScore):
print str(score) + ":\t\t " + str(ability)
def pReroll():
aRoll = raw_input("Do you wish to reroll? (y/n)")
aRoll = aRoll.lower()
if aRoll not in ('y', 'n'):
print "Please type 'y' or 'n'"
return pReroll()
pQuestion()
pStats()
pReroll()
将print aRoll
放在pQuestion()
之后,在脚本底部,它告诉我aRoll
未定义。我没有正确回复aRoll
吗?
答案 0 :(得分:2)
aRoll
是每个函数中的一个单独的局部变量。您需要将其声明为全局(不是一个好主意),或者显式地将一个函数的返回值作为参数传递给下一个。例如,
rv = pQuestion()
rv2 = pStats(rv)
rv3 = pReroll(rv2)
(注意pReroll
定义的变化,这需要。)
答案 1 :(得分:1)
其他几个答案部分正确,但你必须将他们的答案放在一起才能得到你想要的东西。在底部,它应该如下所示:
$args = array(
'post_type' => array( 'books' ),
'meta_query' => array(
array(
'key' => 'book_state',
'value' => 'sold'
)
),
'posts_per_page' => 3,
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) :
$booksNumber = $the_query->found_posts; // returns 1282 instead of 3
...
首先,您要将aRoll = pQuestion()
pStats(aRoll)
的内容分配给pQuestion()
。接下来,您将其作为参数传递给aRoll
。如果你不这样做会有一些事情发生:
pStats()
定义了参数,因此当您尝试运行此参数时,解释程序会告诉您缺少参数。pstats()
的本地范围,该变量未在函数aRoll
之外定义。有关变量范围的更多信息,请查看here。此页面也可能有用:
http://gettingstartedwithpython.blogspot.com/2012/05/variable-scope.html
答案 2 :(得分:0)
pQuestion()
返回aRoll
,但您永远不会分配返回值。 pStats()
希望您传入aRoll
,但您永远不会。
答案 3 :(得分:0)
您不会返回“变量”,而是返回return语句处的变量值。函数中变量的名称完全不相关。这是一件好事:函数是一种封装代码片段的方法。想象一个简单的函数,它会添加两个数字:
def add(a, b):
result = a+b
return result
然后作者改变主意并在函数内重命名变量:
def add(a, b):
sum = a+b
return sum
最后,他很聪明而且只是
def add(a, b):
return a+b
作为此功能的用户,您不应该为功能内部的名称烦恼。您使用add
函数是因为您希望它返回参数的总和,无论函数如何在内部工作。
如果要使用函数的结果,必须自己将其存储在变量中:
sum_of_2_and_3 = add(2,3)
print(sum_of_2_and_3)
答案 4 :(得分:0)
不要气馁,但是即使我们用aRoll纠正了问题,你的代码还有很长的路要走。您可能需要跟进其他一些问题。
关于你当前的问题:
aRoll
在pQuestion()
中定义,仅在该函数调用期间存在(仅在该函数中在范围中)。
当您在函数中return aRoll
时,名称aRoll
将丢失,并且aRoll&#34;的值会弹出&#34;将函数放入调用代码中。不幸的是,你没有抓住这个价值,所以它基本上融入了以太,永远不会被再次看到。
为了捕获分配所需的值,如下所示:
answer = pQuestion()
现在,您有一个名为answer
的新变量,其中包含值&#34;弹出&#34;函数pQuestion()
(在这种情况下为y
或n
)。请注意,您也可以编写aRoll = pQuestion()
并且您有一个名为aRoll
的变量,其中包含来自pQuestion()
的值,但重要的是,它不会是与pQuestion()
相同的变量INSIDE answer
,因为那个已经丢失了。在你学习的过程中,在任何地方使用不同的变量名称可能是个更好的主意,这样你就不会感到困惑,并且相信同名的变量实际上是相同的(而不是不同的变量)偶然共享名称的范围)
这是一件事。接下来,您以某种方式获得aRoll
或foobar
或pStats()
的值或您为该值赋予 pStats()
的任何名称。您已经告诉aRoll
期望收到一个值并将该值命名为aRoll
- 但此pStats()
与第一个值一样,仅在范围中在pStats()
函数中。问题是,您实际上并未向 pStats(answer)
提供价值,您可以这样做:
pStats(aRoll)
或
pStats(foobar)
或
event.stopPropagation();
或您为变量选择的任何名称。
这个问题的另一个解决方案是将变量声明为全局变量,不传递它们。我敦促你不要追求这个解决方案,因为它会导致非常糟糕的编程习惯,只应在极少数情况下使用 之后你完全理解本地范围的想法。