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
打印“不是可识别的命令!”每次,即使选择是“聊天”或“通话”。这是一个非常简单的代码片段,但我似乎无法看到它有什么问题!
答案 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
是否为真的真值)"。函数调用返回True
或False
(事实上,它返回True
,因为commands
中至少有一个是非空字符串 - 事实上,它们所有都是 - 而且非空字符串是" true-ish"而空字符串是" false-ish"),并且您将selection
与该值进行比较。它永远不会是平等的,因为selection
是一个字符串,而字符串甚至与True
或False
相同,它们是布尔值,更不用说相等了。
你的意思是"如果selection
不是commands
"之一,即"如果selection
不是commands
则不是包含在in
"中。这是一个集合成员问题,而不是比较问题。
在Python中,我们使用if selection not in commands:
关键字完成集合成员资格测试。语法允许我们写出完美自然的声音if not (selection in commands):
,因此我们不需要与{{1}}妥协。
答案 2 :(得分:1)
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: