我正在尝试用Python编写一个冒险游戏程序的一部分,虽然我已经记下了它的大部分内容,但我一直在尝试在函数链的一个分支的末尾返回一个声明为“True”的值。基本上,这是一场对抗怪物的战斗,如果你选择了正确的选项,你就能赢。如果你赢了,你就得到他守护的弓。这是战斗的密码:
#The first line imports all the text displayed in the game, saved in gametext.py
#For purposes of clarity, all text has been saved to variables imported by the file.
#Any variable that is not "HaveBow", "why" or declared by a raw_input() is actually text.
from gametext import *
def BG_fight():
print BowGuardIntro
print InitOptions
BGfirstmove = raw_input('> ')
if BGfirstmove == "1":
spearfight()
elif BGfirstmove == "2":
dead(BGUnarmed1)
else:
dead(BGUnarmed2)
def spearfight():
print GotSpear
print SpearFight
spearact = raw_input("> ")
if spearact == "1":
blindfight()
elif spearact == "2":
dead(SeeChest)
elif spearact == "3":
dead(SeeArms)
else:
dead(NoUseSpear)
def blindfight():
print BlindFight
followblow = raw_input("> ")
if followblow == "1":
print Victory
HaveBow = True
return HaveBow
elif followblow == "2":
dead(BlindArms)
else:
dead(BlindNoKill)
def dead(why):
print why
exit(0)
BG_fight()
(如果有人感兴趣,我也可以制作gametext文件的内容,不过我宁愿不要,因为它很长,与我遇到的问题无关)
如您所见,只有一个分支提供了获胜条件(这将给出HaveBow=True的值,我想返回这个值),它嵌套在两个函数中,并且是if语句的一部分。我想知道的是如何将“HaveBow=True”值返回到函数链之外,以便它可以用于游戏的其他部分?如果我尝试编码:
HaveBow = blindfight()
print HaveBow
在代码的结尾,并尝试运行它,它只是让我重复游戏的这一部分两次,然后宣布“真”。如果我尝试BG\u fight()而不是blindfight(),也是一样的。但我不想这样,我只想用“真”来表示“HaveBow”,这样我就可以在游戏的其他部分使用条件“HaveBow=True”。你知道吗
简而言之,我的问题是,是否可以从嵌套函数链返回值而不重复该链的代码,如果可以,如何返回?你知道吗
谢谢。你知道吗
只能返回值,不能返回名称和值。换句话说,你不能“return HaveBow=True”;你所能做的就是返回True。无法返回一个值,同时将其赋给函数外部存在的变量。如果你想赋值,你需要在函数外赋值。你知道吗
从您所说的,听起来像您希望HaveBow成为一个全局变量,您可以在您的程序中的任何地方使用它。在这种情况下,您可以将
blindfight
中的代码更改为:请注意,在这种情况下,您不需要返回真值,只需将其直接赋给全局变量即可。你知道吗
最终有更好的方法来组织代码,但这些问题超出了这个问题的范围。目前,我建议,如果你有像
HaveBow
这样的全局状态,你希望能够使用“游戏中的任何其他地方”,你应该使用global
来创建这些全局变量,正如我在示例中所展示的那样。随着您学习更多编程知识,您将逐渐了解为什么使用全局变量通常不是最好的主意,但对于本程序而言,它是最简单的解决方案。你知道吗相关问题 更多 >
编程相关推荐