2016-10-09 8 views
-2

これはpython 2.7の.find()関数をテストするために書かれただけですが、うまくいかないようです。私の構文は正しく見えますが、なぜ機能していないのかわかりません。あなたがそれぞれの上にs.count() またはs.find() != -1:を使用する必要がpythonの.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

''24 'と' England''の式はブール値== Falseを返します。これが検索対象となります。 – Elalfer

+0

だから、私はこれらの2つの単語を検索し、それらの単語がそこにあるかどうかに応じて何かを印刷する方法はありますか? – user3092467

答えて

-1

:イングランドと24

if s.find('24' and 'England'): # it's a number which is always true hence your code is failing 
+0

真剣に@PrestonM、ダウン投票?なぜか教えてくれますか? – rafalf

+0

'print('24 'と' England ')'を試してください。また、どのユーザーがあなたを落胆させたのかわからない。いいえ、私でもありませんでした。各...の –

+0

は、s.find('24 ')とs.find(' England ')を意味します。それらを一緒に使用したい場合は、両方で言うでしょうか。 – rafalf

0

検索はブール値を返しません、それが見つかった値の開始インデックスを返します。値が見つからない場合は-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?' 

https://www.tutorialspoint.com/python/string_find.htm

2

.find()のごブールと使用が両方とも間違っています。

まず、あなたはand一緒にあなただけの'England'を取得'24' and 'England'場合:

右が最も andからの結果であるように、両方の文字列はPythonの意味で Trueをしているためである
>>> '24' and 'England' 
'England' 

>>> bool(-1) 
True 

そして.find()は返すことができます:また、Pythonの意味でTrueである。見つからない場合-1 - あなたが唯一'England'

.find()を探しているs.find('24' and 'England')使うときにサブストリングのインデックスを返します。ブール値の意味で、まだターゲット文字列で始まる文字列のインデックス0は、0Falseです。この場合、文字列が見つからないと誤って考えるでしょう。

Pythonで存在またはメンバーシップのテストのためにテストするための正しいオペレータがinです:

>>> s='I am 24 and live in England' 
>>> '24' in s and 'England' in s 
True 

あなたのif声明そのように書き、またはそれ以上の慣用的に、複数の条件をテストするために、(ためallを使用することができますinorand)またはany():

>>> all(e in s for e in ('24','England')) 
True 
>>> any(e in s for e in ('France','England')) 
True 
>>> all(e in s for e in ('France','England')) 
False 

次にあなたがシームレスFUTURに条件を追加することができますあなたのコードを変更するのではなく、

関連する問題