Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改函数字典-Python_Python_Dictionary_Global Variables - Fatal编程技术网

更改函数字典-Python

更改函数字典-Python,python,dictionary,global-variables,Python,Dictionary,Global Variables,所以我在业余时间创建了一个相当基本的rpg,但我遇到了一个绊脚石。我想通过每次玩家进入/退出战斗时更改命令字典,使其在特定时间只能访问特定功能。然而,我为搜索字典键而设置的循环似乎不适用于任何命令,除了最初编写的命令 主文件: from commands import * Commands = { "travel": Player.travel, "explore": Player.explore, "help": Player.

所以我在业余时间创建了一个相当基本的rpg,但我遇到了一个绊脚石。我想通过每次玩家进入/退出战斗时更改命令字典,使其在特定时间只能访问特定功能。然而,我为搜索字典键而设置的循环似乎不适用于任何命令,除了最初编写的命令

主文件:

    from commands import *

    Commands = {
        "travel": Player.travel,
        "explore": Player.explore,
        "help": Player.help,
        }

    p = Player()

    while (john_hero.health > 0):
        line = raw_input("=> ")
        args = line.split()
        if len(args) > 0:
            commandFound = False
            for c in Commands.keys():
                    if args[0] == c[:len(args[0])]:
                            Commands[c](p)
                            commandFound = True
                            break
            if not commandFound:
                    print "John's too simple to understand your complex command."
command.py

            class Player:
                def __init__(self):
                    self.state = "normal"
                    john_hero = John()
                    self.location = "Town"
                    global Commands
                    Commands = {
                            "attack": Player.attack,
                            "flee": Player.flee,
                            "help": Player.help
                            }
                def fight(self):
                    Player.state = "fight"
                    global Commands
                    enemy_a = Enemy()
                    enemy_name = enemy_a.name
                    print "You encounter %s!" % (enemy_name)
*注意:循环取自其他人的代码。我之所以使用它,是因为我创建游戏主要是为了学习

commands = {"travel":{"cmd":Player.travel, "is_available":True}}
for key in commands:
    if commands[key]["is_available"]:
        print "do stuff"

但是正如@arunkumar所指出的,如果没有更多的代码,就很难回答这个问题。

您在
command.py
中的代码似乎试图修改在
主文件中定义的全局变量,换句话说,类似这样:

这不起作用,因为您的代码现在有两个
命令
变量,一个在
command.py
范围内,一个在
主文件
范围内。与其让两个文件共享一个全局变量(在我看来这是一个非常糟糕的想法),我建议您将
命令
设置为
播放器
的一个属性:

class Player:
    def __init__(self):
        ...
        self.Commands = {
            "attack": Player.attack,
            "flee": Player.flee,
            "help": Player.help
        }

修改
命令的代码在哪里?@arunkumar啊,我刚刚添加了它。回想起来,我不把它包括在内是相当愚蠢的。