Python“;或;与“一起使用”;在;陈述

Python“;或;与“一起使用”;在;陈述,python,logical-operators,Python,Logical Operators,我有以下代码: url='http://mybeautifulurl.com' ('h' or 'f') in url[0:4] #This is True ('f' or 'h') in url[0:4] #This is False 我只是想理解为什么“or”操作符似乎只计算第一个条件。如果计算结果为true(作为bool),则此或返回第一个元素,否则返回第二个元素。。。它通常用于设置默认值 这样,'h'或'f'就是'h','f'或'h'就是'f' 您可以通过以下方式实现您想要的: an

我有以下代码:

url='http://mybeautifulurl.com'

('h' or 'f') in url[0:4] #This is True
('f' or 'h') in url[0:4] #This is False

我只是想理解为什么“or”操作符似乎只计算第一个条件。

如果计算结果为true(作为bool),则此
返回第一个元素,否则返回第二个元素。。。它通常用于设置默认值

这样,
'h'或'f'
就是
'h'
'f'或'h'
就是
'f'

您可以通过以下方式实现您想要的:

any(x in url[:4] for x in ['h', 'f'])

Python不是英语。您的状况必须是。。。或…中的“f”
。(或者一些可选的检查,允许您一次性地表达出来。)提示:尝试在解释器中单独运行括号内的内容。也许还可以用空字符串和“and”运算符进行实验。问题已标记,但已重复,并且是;它与'in'语句无关,因为即使以下代码的计算结果也是错误的:'h'=('f'或'h')如果您试图概括这一点,您可能需要研究更有效的操作,例如:'notset(['h','f','a','b','c',…,'awefw'])。isdisjoint(url[:400])甚至以下代码的计算结果也是错误的:
'h'=('f'或'h')
。我对下面的答案投了赞成票,但由于问题重复,分数并没有增加。其他非常有用的答案可以在建议或甚至处找到。@cinv3
'h'==('h'或'f')
计算结果为true(注意
'h'
'f'
之间的顺序)。