Python - 我之前已经定义了变量但它们不能在一个函数中工作

时间:2012-12-01 19:35:44

标签: python variables function

在Python脚本的最开始,我已经定义了很多变量。例如:

cmd_attack = "attack"
cmd_protect = "protect"
cmd_help = "help"

cmd_help适用于此处显示的用户菜单功能:

def usermenu():
    um_in=raw_input('Menu :: ')
    #Help Command
    if um_in.lower()==cmd_help.lower():
        print(helplist)
        usermenu()

这很成功 - 它会打印帮助列表,然后返回原始输入。但是,当我在另一个函数中执行类似涉及cmd_help的事情时......

def tf_elf_battle_merc():
    battleinput==raw_input('Elf :: ')
    global cmd_help
    global cmd_attack
    global cmd_protect
    if battleinput.lower()==cmd_attack.lower():
        attack_merc()
    elif battleinput.lower()==cmd_help.lower():
        print(tf_elf_help)

它什么都不做,不打印任何错误,并返回到shell行 - 不打印任何东西或去任何地方。我使用全局命令,因为我正在测试问题的可能解决方案。 放入它们的顺序是顶部的CMD函数,中间的tf_elf_battle_merc()和最后的usermenu()。我尝试了一些事情,相关的问题没有帮助......任何想法?我是Python的新手。如果你很好奇,那就是你可以登录并玩文字类型游戏的脚本。

The full script is here on Pastebin.

提前谢谢!

编辑:如果您下载并运行脚本 - 使用“Guest”(区分大小写)作为用户名,您将被允许使用

1 个答案:

答案 0 :(得分:2)

battleinput==raw_input('Elf :: ')更改为battleinput=raw_input('Elf ::')后,您的代码(带有一些编辑,如下所示)对我来说很好,您不想比较它们,您想要定义battleinput

但是,它应该引发错误,因为battleinput未定义,但您正在尝试比较它:if battleinput.lower() == ...

你还在混合Python 3和Python 2吗?使用Python 2中的raw_input(),而来自Python 3的print("asd"),而不是Python 2的print "asd"

一切看起来都没有达到您的代码,问题出在其他地方。


这是Python 3的代码,可以正常工作:

cmd_attack = "attack"
cmd_protect = "protect"
cmd_help = "help"


def tf_elf_battle_merc():
    battleinput=input('Elf :: ') # Use raw_input() for Python 2
    # You don't need the globals here
    if battleinput.lower()==cmd_attack.lower():
        print("attack")
    elif battleinput.lower()==cmd_help.lower():
        print("help")

tf_elf_battle_merc()