从输入中获取命令

时间:2011-12-04 02:10:43

标签: python string list input

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

打印“不是可识别的命令!”每次,即使选择是“聊天”或“通话”。这是一个非常简单的代码片段,但我似乎无法看到它有什么问题!

4 个答案:

答案 0 :(得分:4)

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

if selection not in commands:

any来自谓词演算,并检查其输入是否为True。在这种情况下,您要将输入与any(commands)进行比较,因为True中有True元素,因此commands。{/ p>

答案 1 :(得分:3)

  

选择!=任何(命令)

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

在编程中,比较是比较,集合 - 成员资格测试是设置成员资格测试。他们不能混淆,他们可以用英语。编程要求我们准确理解我们的意思,不要让自己被我们真正意义上的偶然措辞所误导。

您所写的内容意味着"如果selection不等于(commands是否为真的真值)"。函数调用返回TrueFalse(事实上,它返回True,因为commands中至少有一个是非空字符串 - 事实上,它们所有都是 - 而且非空字符串是" true-ish"而空字符串是" false-ish"),并且您将selection与该值进行比较。它永远不会是平等的,因为selection是一个字符串,而字符串甚至与TrueFalse相同,它们是布尔值,更不用说相等了。

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

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

答案 2 :(得分:1)

如果参数iterable中的至少一个元素评估为any(),则

True返回True,否则返回False。所以,你的代码在这里:

if selection != any(commands):

看到commands是一个非空(因此,“真”)字符串的列表,任何只会返回True。代码保留为:

if selection != True:

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

if selection not in commands:

干杯!

答案 3 :(得分:0)

更改此行:

if selection != any(commands):

对于这一行:

if selection not in commands: