当前位置: 首页 > 知识库问答 >
问题:

变量的多IF语句?

丁曦哲
2023-03-14

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

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

对不起,如果我在任何地方重复了我自己,只是想让背景目的更清楚。

共有1个答案

田信然
2023-03-14

感觉可能您需要一个具有属性的用户对象,例如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语句中是否做错了或者是否不可能。 问题答案: 可以分配变量,但不能在条件语句中声明变量: