2017-07-15 15 views
0

私は、2つの引数、すなわち​​とtarget stringをとる関数を書いています。この関数は、ターゲット文字列内の検索文字列を検索し、ターゲット文字列内の検索文字列がどこにあるかを表す文字列を返す必要があります。文字列内の単語の位置を返す関数(Python)

たとえば、ターゲット文字列がtarget_string = "Georgia Tech"およびsearch_string = "Georgia"の場合は、文字列"Beginning"が返されます。検索文字列が"gia"であれば、それは"Middle"を返す必要がありますし、検索文字列が"Tech"であれば、それは

コード「終了」を返す必要があります。

def string_finder(target_string, search_string):  
    len_search = int(len(search_string)) 
    len_target = int(len(target_string)) 

    if search_string in target_string: 
     if target_string.find(search_string)<=len_search: 
      return "Beginning"   
     elif #***missing statement:***    
      return "Middle"   
     elif target_string.find(search_string, -len_search):    

      return "End" 
    else:   
     return "Not found" 

コードが今のように動作しているようですが、私はを検索文字列がターゲット文字列の中央にあるかどうかを判断するためにどの条件を満たさなければならないかを調べるのに問題があります。 len_difはSEARCH_STRINGとターゲット文字列の長さの差である

target_string.find(search_string, len_str, len_dif): 

私の推測では、文は次のようになりますということです。これを行うことで、正しい答えが出力されますが、最終的にはelifが上書きされます。だから私は

print(string_finder("Georgia Tech", "Georgia")) 
print(string_finder("Georgia Tech", "gia")) 
print(string_finder("Georgia Tech", "Tech")) 
print(string_finder("Georgia Tech", "Nothing")) 

代わりに印刷「はじまり」の次のコードを実行した場合、「中」は、「終了」と「見つかりません」それは印刷し、「始まり」、「中」、「ミドル」と「見つかりませんでした"

誰かが私を正しい方向に向けることができたら、私は感謝します!!

私はPythonにはかなり新しく、プログラミングは最近まで本当に私のものではなかったことに注意してください。そうすれば、私はあまりにも愚かな間違いになりがちです。

+0

何かのターゲット文字列=検索文字列を? – frozen

+0

'len'は文字列ではなく整数を返します。 'int(len(...))'を行う理由はありません。 –

+0

"開始"の条件が間違っています。それが最初であれば、「find」は0を返します。 –

答えて

1

"End"のための右の条件はs1.find(s2) + len(s2) == len(s1)かどうかを確認することです。

In [660]: def string_finder(s1, s2): 
    ...:  i = s1.find(s2) 
    ...:  if i == 0: 
    ...:   return "Beginning" 
    ...: 
    ...:  elif i > 0: 
    ...:   if i + len(s2) == len(s1): 
    ...:    return "End" 
    ...:   else: 
    ...:    return "Middle" 
    ...: 
    ...:  else: 
    ...:   return "Not Found" 
    ...:  

In [661]: string_finder("Georgia Tech", "Georgia") 
    ...: string_finder("Georgia Tech", "gia") 
    ...: string_finder("Georgia Tech", "Tech") 
    ...: string_finder("Georgia Tech", "Nothing") 
    ...: 
Beginning 
Middle 
End 
Not Found 
+0

あなたは命の恩人です。あなたの答えは魅力のように働き、思考プロセスの大きな欠陥を見ました。私は私のアプローチには凝視されていて、何も考えられませんでした。私はもっ​​と練習が必要だと思う。 – NikSotir

+0

@NikSotir私たちは一度すべて同じでした。幸運:) –

-1

ホイールを改造しないでください。 Pythonは、あなたが使用できるいくつかの有用な文字列のメソッドがあります。

if target_string.startswith(search_string): 
    return 'Beginning' 
elif target_string.endswith(search_string): 
    return 'End' 
elif target_string in search_string): 
    return 'Middle' 
else return 'Not Found' 
+0

ありがとうございます。私が言及したように、私はかなりPythonに新しいので、私は利用可能なすべてのメソッドに精通していない。 – NikSotir

0

あなたはこのような何かを試すことができます。

s = "Georgia Tech" 

target = "Georgia" 

if target in s.split(): 
    the_index = s.split().index(target) 

    if the_index == len(s.split())-1: 
     print "end" 

    elif the_index == 0: 
     print "Beginning" 

else: 

    the_index = s.index(target) 

    if the_index > 0 and the_index < len(s) -1: 
     print "middle" 

    elif the_index == 0: 
     print "Beginning" 

    elif the_index == len(s)-2: 
     print "end" 

出力:

Beginning 
+0

お返事ありがとうございます。非常に多くの偉大な答えを得ることは、私が手近な問題に近づく方法を改善するのに本当に役立ちます。 – NikSotir

0

あなたのコードは、検索文字列がターゲット文字列であることを確認します。それはいいです。唯一の問題は、結果文字列の1つを返す状況です。

私はあなたが文字列1時間の位置を計算することを示唆していると、あなたのコードの残りの部分でその番号を使用したい:、あなたが使用するどのような条件では不明だ

pos = target_string.find(search_string) 

if pos < len_search: 
    return "Beginning" 

次小切手の「中央」部分については、それはまた大丈夫です。通常、私がそのようなものを不明瞭にしているとき、私はそれを単に「残りの部分」または「デフォルト」にします。「

あなたがIF/ELIFタイプの構造をしている場合は、 『デフォルトは』 else:ブロックです:

elif pos >= len_target - 2 * len_search: 
    return "End" 
else: 
    return "Middle" 

検索文字列があるときことに注意してください 『最後に』正確に結果をstr.find()は、len_target - len_searchの開始の場所になります。「終了」の結果に「ファジー」が必要な場合は、いくつかの追加を許可する必要があります。2 * len_searchを選択しました最初の手当に合っているからです。

+0

偉大な答え!あなたはそれを言いましたが、私は確かに少し不明でしたが、それは意図的ではありませんでした。私の経験の欠如(プログラミングとSOの質問の両方)は、これに貢献しました。ありがとうございました。 – NikSotir

0

私は、次のコードではなく、明確な見つける:

from __future__ import print_function 

target_string = "Georgia Tech" 

for search_string in ("Georgia", "gia", "Tech", "bla"): 
    print("Result of searching for %s in %s: " % (search_string, target_string), 
      end="") 
    if target_string.startswith(search_string): 
     print("Beginning") 
    elif target_string.endswith(search_string): 
     print("End") 
    elif target_string.find(search_string) != -1: 
     print("Middle") 
    else: 
     print("Absent") 

与える:

Result of searching for Georgia in Georgia Tech: Beginning 
Result of searching for gia in Georgia Tech: Middle 
Result of searching for Tech in Georgia Tech: End 
Result of searching for bla in Georgia Tech: Absent 
関連する問題