变量的多个IF语句?

时间:2013-12-24 03:24:37

标签: python variables if-statement dictionary

好吧,我正在使用字典,例如:

l = {'@': self.ops, '~': self.ops, '&': self.ops, '+': self.voices, '%': self.voices}

那么我想要做的基本上就是说,如果“User”(一个参数)在他们的名字前面有'@',那么如果前面有'〜',则将变量前缀指定为'@'他们的名字,将变量前缀指定为'〜',如果他们有'&'在他们的名字前面,将变量前缀指定为'&'。因此,我需要if语句并将它们与self.ops值进行比较。

然后我想基本上说如果用户的名字前面有'%',请将前缀变量设置为'%',否则将其设置为'+'(因为这些值只有两个键)。所以为此我需要一个if语句并将它们与self.voices值进行比较。

分配前缀变量的当前代码

目前所做的只是检查用户姓名前面的前缀/符号是否在字典值self.ops中,无论是哪一个,都将其设置为“@”,否则将其设置为“+”。我希望它对每个符号更具体。例如,如果它是&然后变量前缀变为'&'

def irc_RPL_NAMREPLY(self, *arg):
    if not arg[1][2].lower() == self.factory.channel:
        return
    for name in arg[1][3].split():
        mode = name[0]
        l = {'@': self.ops, '~': self.ops, '&': self.ops, '+': self.voices, '%': self.voices}
        if mode in l: 
            l[mode].add(name[:])

def left(self, channel):
    if channel.lower() == self.factory.channel:
        self.ops = None
        self.voices = None

@channel
def modeChanged(self, user, channel, set, modes, args):
    ll = {'o' : self.ops, 'q' : self.ops, 'a' : self.ops, 'v' : self.voices, 'h' : self.voices}
    for i in range(len(args)):
        mode, name = modes[i], args[i]
        if mode not in ll:
            continue
        l = ll[mode]
        if set:
            l.add(name)
        elif not set:
            l.discard(name)

@channel
def privmsg(self, user, channel, msg):
    if user in self.ops or user in self.voices:
        prefix = '@' if user in self.ops else '+'
        alias = self.factory.aliases.get(user, user)
        if msg.startswith(self.factory.commandprefix) and user in self.ops:
            self.unaliased_name = user
            self.name = prefix + alias
            input = msg[len(self.factory.commandprefix):]
            result = commands.handle_input(self, input)
            if result is not None:
                self.send("%s: %s" % (user, result))
        elif msg.startswith(self.factory.chatprefix):
            max_len = MAX_IRC_CHAT_SIZE - len(self.protocol.server_prefix) - 1
            msg = msg[len(self.factory.chatprefix):].strip()
            message = ("<%s> %s" % (prefix + alias, msg))[:max_len]
            message = message.decode('cp1252')
            print message.encode('ascii', 'replace')
            self.factory.server.send_chat(encode(message))

提前感谢您的帮助。

如果我的问题不明确,请通知我,我会尽力纠正。我已经检查了其他问题,但由于我的问题的性质,我似乎无法找到像这样的问题。不然道歉。

编辑:此

的更详细目的

基本上这与IRC聊天有关。频道运营商/用户将在其名称前面有符号作为前缀(例如@Shaz,~Shaz,&Shaz,+ Shaz或%Shaz)。我正在运行一个游戏服务器,该游戏使用IRC聊天频道与游戏中的玩家进行通信。我正在尝试做的是从用户名称(@,〜,&amp;,+和%)中取出前缀,以便在用户输入消息时通过游戏中的聊天发送(例如, @Shaz:嗨blahblah)。至于其他任何细节,我认为没有太多相关性。我需要知道的是如何使用多个if语句来分配变量,因此它根据用户正在使用的那个(基本上是字典确定的)发送上述任何符号,为此,我需要以某种方式能够根据字典找到的“前缀”变量将正确的符号设置为用户在其名称前面的变量。那么那可以被用来作为通过聊天发送的符号,所以如果我是“&amp; Shaz”当我对游戏聊天说些什么时就会像“&amp; Shaz:hi blahblah” 。目前无论我在我的名字前面使用什么符号,如果我不是“self.op”权利,它只会通过游戏聊天发送“@Shaz:hi blahblah”,它只会发送它as“+ Shaz:hi blahblah”,如前缀变量分配的行所示。

整个代码文件 - http://pastebin.com/mDsJQA3X

很抱歉,如果我在任何地方重复了一遍,只是想让背景目的更清晰。

1 个答案:

答案 0 :(得分:1)

感觉您可能需要拥有User对象,其中包含is_opis_voiceprefix等属性,而不仅仅是传递用户名字符串。既然看起来你正在使用现有的IRCBot类,那么在不重写更多类的情况下很难实现你真正想要的东西 - 你需要的信息就被丢弃了。您已经在做唯一可能的事情,应用@+作为前缀。

尽管如此,你真正要问的问题是:
“如何使用多个if语句来分配变量”

由于您已在代码中使用elif,因此我理解这个问题意思是:
“你如何在Python中执行switch / case语句”

在此处回答:Replacements for switch statement in Python?