1

我正在尝试用 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()

(如果人们有兴趣,我也可以生成游戏文本文件的内容,虽然我不想这样做,因为它很长并且与我遇到的问题无关)

如您所见,那里只有一个分支提供获胜条件(这将给出我想要返回的 HaveBow = True 值),并且它嵌套了两个函数,并且是 if 语句的一部分。我想知道的是如何将“HaveBow = True”值返回到函数链之外,以便可以在游戏的其他部分使用?如果我尝试编码:

HaveBow = blindfight()
print HaveBow

在代码末尾并尝试运行它,它只会让我在声明“True”之前重复该部分的游戏两次。如果我尝试 BG_fight() 而不是blindfight() 也是如此。但我不想要那个;我只想要“HaveBow”的“True”,这样我就可以在游戏的其他部分使用条件“HaveBow = True”。

简而言之,我的问题是是否可以从嵌套函数链返回一个值而不重复该链的代码,如果可以,如何?

谢谢。

4

1 回答 1

3

您只能返回一个,而不是名称和值。换句话说,你不能“返回 HaveBow = True”;你所能做的就是返回True。无法在返回值的同时将其分配给函数外部存在的变量。如果要分配值,则需要在函数之外进行。

从你所说的,听起来你希望 HaveBow 成为一个全局变量,你可以在程序的任何地方使用它。在这种情况下,您可以将代码更改blindfight为:

if followblow == "1":
    global HaveBow
    print Victory
    HaveBow = True

请注意,在这种情况下,您不需要返回 True 值——您只需将其直接分配给全局变量。

最终有更好的方法来构建你的代码,但这些问题超出了这个问题的范围。目前,我建议,如果你有这样的全局状态HaveBow,你希望能够使用“游戏中的任何其他地方”,你应该使用global我在示例中显示的这些全局变量。随着您学习更多编程,您将逐渐了解为什么使用全局变量通常不是最好的主意,但就本程序而言,它是最简单的解决方案。

于 2014-04-16T07:26:41.860 回答