2012-12-17 79 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

相关问题