in语句python_python“in”语句会自动返回true

为了以相反的顺序回答你的问题,明确地与True比较的原因并不适合你,因为Python没有按照你期望的方式解释表达式. Python解析器具有对比较表达式的特殊处理,因此您可以将它们链接在一起并获得合理的结果,如下所示:

>>> "a" == "a" == "a"

True

请注意,Python必须将整个事件视为一个操作,因为如果将它拆分为两个操作,则无法获得相同的结果:

>>> ("a" == "a") == "a"

False

>>> "a" == ("a" == "a")

False

这些行为有所不同,因为括号中的部分首先被计算并返回True,但是True!=“a”因此整个表达式返回false.

根据权利,上述内容实际上根本不会对您的程序产生任何影响.不幸的是,Python通过与==相同的机制处理,所以当你将它们链接在一起时,它们被解释为如上所述的序列,因此Python实际上按如下方式对其进行求值:

>> "a" in ["a"] == True

False

>>> ("a" in ["a"]) and ("a" == True)

False

这是古怪的,可以说是反直觉的,但遗憾的是它是如何运作的.要获得您想要的行为,您需要使用括号来强制Python分别评估第一部分:

>>> ("a" in ["a"]) == True

True

尽管如此,== True是多余的,因为正如您所怀疑的那样,表达式已经返回一个布尔值,而if语句只能按原样评估它.

现在回到你的另一个问题,我相信你要做的是取一行输入并根据用户输入的内容产生一个相应的输出行.您可以将in运算符应用于字符串和列表,以查看该字符串是否在列表中,这样您就可以完全消除for循环:

answer = ['Yes', 'yes', 'YES']

answer2 = ['No', 'no', 'NO']

ans = raw_input()

if ans in answer:

print "Yes!"

elif ans in answer2:

print "No!"

else:

print "Don't know what that means"

这首先测试输入是否与answer中的任何字符串匹配,然后对于answer2则相同.当然,您可以实现类似的效果,但也可以通过简单地将输入转换为小写并将其与小写形式进行比较来支持其他形式(如YeS):

if ans.lower() == "yes":

print "Yes!"

# (and so forth)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值