簡體   English   中英

返回單詞在字符串中的位置的函數

[英]Functions that returns the position of a word in a string

我正在編寫一個帶有兩個參數的函數: search stringtarget string 該函數將在目標字符串中尋找搜索字符串,並應返回一個字符串,該字符串表示在目標字符串中找到搜索字符串的位置。

例如,如果目標字符串是target_string = "Georgia Tech"search_string = "Georgia" ,則應返回字符串"Beginning" 如果搜索字符串是"gia" ,則應返回"Middle" ;如果搜索字符串是"Tech" ,則應返回“ End”

碼:

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"))

代替打印“ Beginning”,“ Middle”,“ End”和“ Not Found”,它打印“ Beginning”,“ Middle”,“ Middle”和“ Not Found”

"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

您可以嘗試如下操作:

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

您的代碼確認搜索字符串在目標字符串中。 沒關系。 唯一的問題是在什么情況下您將返回結果字符串之一。

我建議你計算的字符串一個時間的位置,然后使用你的代碼的其余部分,這個數字:

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"

請注意,當搜索字符串的末尾是“ exactly”時, str.find()的結果將是搜索字符串的起始位置,即len_target - len_search 如果您希望“結束”結果中出現任何“模糊”,則必須允許一些額外的內容。 我選擇使用2 * len_search因為它在開始時與您的津貼相符。

我發現以下代碼相當清楚:

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

不要重新發明輪子。 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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM