好吧,我正在使用字典,例如:
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
很抱歉,如果我在任何地方重复了一遍,只是想让背景目的更清晰。
答案 0 :(得分:1)
感觉您可能需要拥有User
对象,其中包含is_op
,is_voice
,prefix
等属性,而不仅仅是传递用户名字符串。既然看起来你正在使用现有的IRCBot
类,那么在不重写更多类的情况下很难实现你真正想要的东西 - 你需要的信息就被丢弃了。您已经在做唯一可能的事情,应用@
或+
作为前缀。
尽管如此,你真正要问的问题是:
“如何使用多个if语句来分配变量”
由于您已在代码中使用elif
,因此我理解这个问题意思是:
“你如何在Python中执行switch / case语句”