正在尝试从嵌套的函数链(在Python中)返回真变量。。。

2024-04-23 19:05:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用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”。你知道吗

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

谢谢。你知道吗


Tags: the函数texttrueinputrawifdef
1条回答
网友
1楼 · 发布于 2024-04-23 19:05:38

只能返回,不能返回名称和值。换句话说,你不能“return HaveBow=True”;你所能做的就是返回True。无法返回一个值,同时将其赋给函数外部存在的变量。如果你想赋值,你需要在函数外赋值。你知道吗

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

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

请注意,在这种情况下,您不需要返回真值,只需将其直接赋给全局变量即可。你知道吗

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

相关问题 更多 >