2012-12-17 77 views
1

我參加了一門編程課程,最後是明天。我正在練習最後和我卡在這個問題:如何使一個函數檢測字符串中的字符並返回字符串中的位置? Python 3.2

考慮下面的功能標題

高清firstOccur(CH,S):

編寫返回的第一個匹配的方法存儲在字符串s中的字符。如果在字符串中找到該字符,您的函數應該返回它的位置。因此,如果s ='abcdefg'且ch的值是'd',程序將返回3.如果在字符串中找不到該字符,則程序應該返回-1。

我給了它一個嘗試,但沒有運氣。這是我在哪裏:

def firstOccur(ch, s): 
    b = len(s) 
    n = 0 
    for c in range(b): 
     d = ch[0] 
     e = s[c] 
     if d != e: 
      return(-1) 
     else: 
      while d != e: 
       n = n+1 
      return(n) 
def main(): 
    a = firstOccur('d', 'abcdefg') 
    print(a) 
main() 

主要功能只是測試firstOccur函數。我不知道該從哪裏出發,或者如果我走在正確的道路上。幫幫我?

+2

我認爲使用內置的'string.find'函數這)不會算作正確的問題嗎? – zwol

回答

1

好吧,我們來分解一下。你給出了一個字符列表,又名一個字符串。因此,任務是迭代(=循環)這個列表,直到你在列表中第一次出現搜索關鍵字。一旦你擊中了發生,返回它的位置,這也打破了循環。如果完成循環而沒有找到搜索關鍵字,請返回-1(順便說一句,None在Python中會更有意義)。

Python中,你提供了一個名爲enumerate一個內置函數,它接受一個列表,並返回一個元素索引和元素本身的元組的列表。即

['a', 'b', 'c', 'd'] 

或 「ABCD」

變得

[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')] 

這是一個nobrainer。

def firstOccur(key, string): 
    for i, c in enumerate(string): 
     if key == c: 
      return i 
    return -1 

如果你不能使用枚舉,也有「長」的道路,以及:

def firstOccur(key, string): 
    for i in range(len(string)): 
     if key == string[i]: 
      return i 
    return -1 
+0

是的,不能使用枚舉,但最後一個正是我需要的,謝謝! – JustaGuy313

0

你可以嘗試這樣的事情;它會返回零位索引(即第一個字符爲0,第二個爲1)。枚舉能夠爲您追蹤當前位置。

def firstOccur(ch,s): 
    for pos, char in enumerate(s): 
     if char == ch: 
      return pos 

    return -1 

a = firstOccur('d', 'abcdefg') 
// a = 3 
1

這基本上是一樣的string.find()方法:) 預見到你不允許使用任何超過Python的基礎知識來解決這個問題...

for x in range(len(s)): 
    if ch == s[x]: 
     return x 
return -1 
0

你並不需要循環在Python這樣的字符串:for c in range(b)。您可以簡單地從字符串中抓取每個字符:for character in s在字符串上循環,依次給予每個字符。

if d != e: return(-1) - 每次你打一個字,是不是你想要的時候,你會回來。另外,如果ch是一個字符,則不需要ch[0]

Python帶有一個非常方便的函數,稱爲enumerate。這將列出iterable中的值以及它們的位置。下面是它如何可能看起來輪廓:

for index, character in enumerate(s): 
    if #<test condition here on character>: 
     return index 
return -1 
0

一個更簡單的方法來做到這將是

def first_occur(my_string,my_char): 
    try: 
     return my_string.index(my_char) 
    except ValueError: 
     return -1 

如果您不允許使用的類型的任何方法(我希望我說正確)或內置插件格式範圍

def first_occur(my_string,my_char): 
    count=0: 
    for value in my_string: 

     if value==my_char: 
      return count 
     count+=1 

    return -1 

我認爲,如果你不能使用枚舉你不應該能夠使用範圍

如果您將count + = 1移動到value後面的行,那麼列表將被索引爲1,否則索引爲0

相關問題