我想检查一个子字母,所以我编写了这段代码(Python 2.7):
print text
if ('e' or 'E') in text:
text = "%s"%float(text)
print text
建议here。
text是一个变化的变量,它具有值0E-7
然而,这不起作用。 当我调试时,它跳过if块。
为什么条件是假的?
答案 0 :(得分:3)
您的代码所询问的是“('e' or 'E')
中的值text
?”评估('e' or 'E')
时,您会获得'e'
。这是修复:
if ('e' in text) or ('E' in text):
答案 1 :(得分:1)
('e' or 'E')
评估为'e'
。因此,您正在测试if 'e' in text:
这里不正确,因为E
中的0E-7
是大写的。
在这里你可以互动地看到它:
>>> text = '0E-7' # note that E is uppercase
>>> ('e' or 'E') in text # why is this false?
False
>>> ('E' or 'e') in text # but true here?
True
>>> ('e' or 'E') # aha! 'or' returns the first truthy value
'e'
>>> 'e' in text.lower() # this fixes it
True
>>> any(c in text for c in 'eE') # another possible fix
True
>>> not set(text).isdisjoint('eE') # yet another way to do it
True
答案 2 :(得分:0)
('e' or 'E')
是一个布尔表达式,它被评估为'e'
。
我的建议是:
if any(char in text for char in ('e', 'E')):
# ...