从输入获取命令

2024-09-30 01:24:20 发布

您现在位置:Python中文网/ 问答频道 /正文

commands = ['chat', 'call', 'exit', 'friends', 'status']

class MainHub(object):
    def menu(self):
        while True:
            selection = raw_input("> ")
            if selection != any(commands):
                print "Not a recognized command!\n"
            else:
                print selection

它会显示“没有一个可识别的命令!”每次,即使选择是“聊天”或“打电话”。这是一个非常简单的代码片段,但我似乎看不出它有什么问题!在


Tags: selfobjectdefstatusexitchatcallcommands
3条回答

如果参数iterable中至少有一个元素的计算结果为True,则{}返回{},否则返回{}。所以,你的代码是:

if selection != any(commands):

commands是一个非空(因此是“true”)字符串的列表时,任何字符串都将返回True。代码如下:

^{pr2}$

这是没有意义的:D.您想知道的是命令列表中是否存在selection,您可以这样做:

if selection not in commands:

干杯!在

selection != any(commands)

对于初学者来说,这似乎是一个非常常见的错误,尽管我最近才开始注意到这一点。另一个常见的尝试是使用value == (3 or 4 or 5),这基本上是相同的错误。在

在编程中,比较是比较,集成员测试是集成员测试。他们不能混淆,他们可以在英语中。编程要求我们对自己的意思要精确,不要让自己被我们真正意思的随意措辞误导。在

你所写的意思是“如果selection不等于commands中任何一个是否为真的真值)”。函数调用返回TrueFalse(事实上,它返回True,因为commands中至少有一个是非空字符串-事实上,它们都是-非空字符串是“true-ish”,而空字符串是“false ish”),然后将selection与该值进行比较。它永远不会是相等的,因为selection是一个字符串,而字符串甚至与{}或{}不是同一种类的东西,更不用说相等了。在

你的意思是“如果selection不是commands之一”,即“如果selection不包含在commands中”。这是一个集合成员问题,不是比较问题。在

在Python中,我们使用in关键字完成集合成员资格测试。语法允许我们写出听起来非常自然的if selection not in commands:,因此我们不需要与{}妥协。在

您不需要any函数,而需要not in语法:

if selection not in commands:

any来自谓词演算并检查其任何输入是否为True。在本例中,将您的输入与any(commands)进行比较,这是True,因为commands中有一个True元素。在

相关问题 更多 >

    热门问题