2017-07-15 71 views
0

我正在寫一個函數有兩個參數:一個​​和target string。該函數將尋找目標字符串中搜索字符串,並應返回表示其中靶字符串搜索字符串中發現一個字符串。函數返回一個字的位置在一個字符串(蟒蛇)

例如,如果目標字符串是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" 

的代碼似乎工作是現在,但我無法確定應該滿足什麼條件才能確定搜索字符串位於目標字符串的中間。

我的猜測是,聲明應該是這樣的:

target_string.find(search_string, len_str, len_dif): 

哪裏len_dif是SEARCH_STRING和目標字符串的長度之差。通過這樣做,它打印正確的答案,但打亂了最終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

你的代碼,確認搜索字符串在目標字符串。沒關係。唯一的問題是您將返回其中一個結果字符串的情況。

我建議你計算的字符串一次位置,然後使用你的代碼的其餘部分,這個數字:

pos = target_string.find(search_string) 

if pos < len_search: 
    return "Beginning" 

接下來,你使用什麼條件是不清楚爲支票的「中間」部分。這也很好。通常,當我對這樣的事情不清楚時,我只是讓它成爲「其餘」或「默認」。「

當你正在做的,如果/ 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 
相關問題