好吧,我正在使用字典,例如:
l = {'@': self.ops, '~': self.ops, '&': self.ops, '+': self.voices, '%': self.voices}
然后我想做的基本上是说,如果“用户”(一个参数)的名称前面有“@”,那么将变量前缀分配为“@”,如果他们的名称前面有“~”,则将变量前缀分配为“~”,如果他们有“
然后我想说,如果用户的名字前面有“%”,则将前缀变量设置为“%”,否则将其设置为“”(因为这些值只有两个键)。为此,我需要一个if语句,并将其与self进行比较。声音的价值。
分配前缀变量的当前代码
目前,它所做的只是检查用户名称前的前缀/符号是否在字典值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、,
整个代码文件-http://pastebin.com/mDsJQA3X
对不起,如果我在任何地方重复了我自己,只是想让背景目的更清楚。
感觉可能您需要一个具有属性的用户对象,例如is\u op、is\u voice、前缀,而不仅仅是传递用户名字符串。由于您似乎正在使用现有的IRCBot类,因此如果不重写该类的更多内容,就很难实现您真正想要的内容-您需要的信息已被丢弃。您已经在做唯一可能的事情,将前缀应用于@或。
尽管如此,您真正提出的问题是:“如何使用多个if语句来分配变量”
由于您已经在代码中使用了elif,我理解这个问题的意思是:“如何在Python中执行switch/case语句?”
这里回答:替换Python中的switch语句?
问题内容: 说我有一大堆的是无论是变量或。我想在一个if语句中评估一组这些变量,以查看它们是否都像这样: 除非那行不通。我知道我可以这样做: 但这是非常丑陋的-特别是如果这些if语句将在我的代码中频繁出现。有什么方法可以使用更简洁的语法进行此评估(例如第一个示例)? 问题答案: 您永远不要使用(或)测试布尔变量。相反,要么写: 或使用(以及相关问题的表弟): 或使用Python的可传递比较:
问题内容: 我收到以下代码的编译错误: 如果将其更改为以下代码,则没有编译错误: 为什么第一种语法是错误的,以及从哪种语言标准开始? 问题答案: Java规范说一条语句具有以下形式: 在哪里和可各种各样的事情,包括块(代码括号括起来),任务(已声明的变量),其他的if语句等。 值得注意的是,该列表中缺少声明语句(例如或),因此会出现编译错误。 有关完整列表,您可以在此处阅读Java规范:http
问题内容: 在Python中,if语句内的变量作用域是否在if语句外可见?(来自Java背景,因此有点奇怪) 在以下情况下,首先在if块内部定义名称,但是该变量在if块外部也可见。我原以为会发生错误,但打印出“ joe”。 问题答案: 语句未在Python中定义范围。 循环,语句,/等都不会。 只有模块,函数和类定义范围。 请参阅Python教程中的Python作用域和命名空间。
我在验证函数中有两个字符串变量,它应该确保变量不会同时为null或空(不允许一个为null,另一个等于空)。 当前的IF语句非常复杂,因为我必须检查: 如果两者都为空 它是功能性的,但丑陋,不是“最佳实践”。如何简化?
null 它是功能性的,但丑陋,不是“最佳实践”。怎么简化呢?
问题内容: 我想知道是否可以像这样在条件运算符中为变量赋值: 用Java有什么办法做到这一点?因为我知道在某些情况下这是可能的,但是我不确定在if语句中是否做错了或者是否不可能。 问题答案: 可以分配变量,但不能在条件语句中声明变量: