为什么Python中'@' and '.' in 'heykidgmail.com'判断返回True
问题原因分析
你的判断语句逻辑出错是因为对Python的运算符优先级和and运算规则理解有误:
- 首先,Python中
in运算符的优先级高于and运算符,你写的'@' and '.' in wrds_indexed并不会被解析为「同时包含@和.」,实际运算顺序等价于:('@') and ('.' in wrds_indexed) - 其次,Python中非空字符串的布尔值为
True,因此'@'的判断结果恒为真,and运算会直接返回第二个表达式'.' in wrds_indexed的结果。也就是说你的判断条件实际只检查了字符串是否包含.,完全没有校验@是否存在,所以不含@但包含.的heykidgmail.com也会被判定为符合条件。
修复方案
将判断条件改为明确校验两个字符是否都存在即可:
if ('@' in wrds_indexed and '.' in wrds_indexed) and (len(wrds_indexed) > 13):
修改后运行代码的输出为:
['heykidhello@gmail.com']
符合预期结果。
内容的提问来源于stack exchange,提问作者Jishnu
相关产品推荐
相关产品推荐

