我刚刚写了这个来测试python 2.7中的.find()函数,但它似乎不起作用。我的语法看起来正确,但我无法弄清楚它为什么不起作用。
s=raw_input('Please state two facts about yourself')
if s.find('24' and 'England'):
print 'are you Jack Wilshere?'
else:
print 'are you Thierry Henry?'
答案 0 :(得分:2)
您的布尔值和newBar
的使用都是错误的。
首先,如果您.find()
在一起and
,您只需获得'24' and 'England'
:
'England'
这是因为在Python意义上这两个字符串都是>>> '24' and 'England'
'England'
所以最右边的是True
的结果。因此,当您使用and
时,您只搜索s.find('24' and 'England')
'England'
返回子字符串的索引 - .find()
如果找不到,那么在Python意义上也是-1
:
True
并且>>> bool(-1)
True
可以返回索引.find()
以查找以目标字符串开头的字符串,在布尔意义上,0
是0
。所以在这种情况下你会错误地认为找不到字符串。
在Python中测试状态或成员资格测试的正确运算符是in:
False
您可以用>>> s='I am 24 and live in England'
>>> '24' in s and 'England' in s
True
语句编写或更具惯用性来测试多个条件,使用if
(适用于all
)或and
(适用于{ {1}})与any
:
or
然后,您可以在将来无缝添加条件,而不是更改代码。
答案 1 :(得分:0)
Find不返回布尔值,它返回找到的值的起始索引。如果找不到该值,则返回-1。
s=raw_input('Please state two facts about yourself')
if s.find('24') >=0 and s.find ('England') >= 0:
print 'are you Jack Wilshere?'
else:
print 'are you Thierry Henry?'
答案 2 :(得分:-1)
您需要使用s.count()
或每个s.find() != -1:
:英格兰和24
if s.find('24' and 'England'): # it's a number which is always true hence your code is failing