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
它会显示“没有一个可识别的命令!”每次,即使选择是“聊天”或“打电话”。这是一个非常简单的代码片段,但我似乎看不出它有什么问题!在
如果参数iterable中至少有一个元素的计算结果为}返回{},否则返回{}。所以,你的代码是:
True
,则{当
^{pr2}$commands
是一个非空(因此是“true”)字符串的列表时,任何字符串都将返回True
。代码如下:这是没有意义的:D.您想知道的是命令列表中是否存在
selection
,您可以这样做:干杯!在
对于初学者来说,这似乎是一个非常常见的错误,尽管我最近才开始注意到这一点。另一个常见的尝试是使用
value == (3 or 4 or 5)
,这基本上是相同的错误。在在编程中,比较是比较,集成员测试是集成员测试。他们不能混淆,他们可以在英语中。编程要求我们对自己的意思要精确,不要让自己被我们真正意思的随意措辞误导。在
你所写的意思是“如果}或{}不是同一种类的东西,更不用说相等了。在
selection
不等于commands
中任何一个是否为真的真值)”。函数调用返回True
或False
(事实上,它返回True
,因为commands
中至少有一个是非空字符串-事实上,它们都是-非空字符串是“true-ish”,而空字符串是“false ish”),然后将selection
与该值进行比较。它永远不会是相等的,因为selection
是一个字符串,而字符串甚至与{你的意思是“如果
selection
不是commands
之一”,即“如果selection
不包含在commands
中”。这是一个集合成员问题,不是比较问题。在在Python中,我们使用}妥协。在
in
关键字完成集合成员资格测试。语法允许我们写出听起来非常自然的if selection not in commands:
,因此我们不需要与{您不需要
any
函数,而需要not in
语法:any
来自谓词演算并检查其任何输入是否为True
。在本例中,将您的输入与any(commands)
进行比较,这是True
,因为commands
中有一个True
元素。在相关问题 更多 >
编程相关推荐