1

我正在上编程课程,明天是期末考试。我正在参加练习决赛,我被困在这个问题上:

给定以下函数标题

def firstOccur(ch, s):

编写一个方法,返回字符串 s 中存储在 ch 中的字符的第一次出现。如果在字符串中找到该字符,您的函数应该返回它的位置。因此,如果 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 功能。我不知道从这里去哪里,或者我是否走在正确的道路上。帮助?

4

5 回答 5

1

好的,让我们分解一下。你会得到一个字符列表,也就是一个字符串。所以任务是在这个列表上迭代(=循环),直到你在列表中第一次出现你的搜索键。一旦你遇到了,返回它的位置,这也打破了循环。如果您在没有找到搜索键的情况下完成循环,请返回-1(顺便说一句;None在 Python 中更有意义)。

Python 为您提供了一个名为的内置函数enumerate,它接受一个列表并返回一个带有元素索引和元素本身的元组列表。IE

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

或“abcd”

变成

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

这是无脑的。

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
于 2012-12-17T00:12:39.117 回答
1

这与 string.find() 方法基本相同 :) 预计您不能使用 Python 基础知识来解决这个问题......

for x in range(len(s)):
    if ch == s[x]:
        return x
return -1
于 2012-12-17T00:13:29.290 回答
0

你可以尝试这样的事情;它将返回索引为零的位置(即,第一个字符为 0,第二个字符为 1,依此类推)。Enumerate 能够为您跟踪当前位置。

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

    return -1

a = firstOccur('d', 'abcdefg')
// a = 3
于 2012-12-17T00:11:42.537 回答
0

你不需要在 Python: 中循环这样的字符串for c in range(b)。您可以简单地从字符串中获取每个字符:for character in s循环遍历字符串,依次为您提供每个字符。

if d != e: return(-1)- 每次你击中一个不是你想要的角色时,你都会回来。此外,如果ch是一个字符,则不需要ch[0].

Python 带有一个非常方便的函数,称为enumerate. 这将列出 an 中的值iterable以及它们的位置。以下是它的外观轮廓:

for index, character in enumerate(s):
    if #<test condition here on character>:
        return index
return -1
于 2012-12-17T00:15:49.527 回答
0

一个更简单的方法是

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

如果您不允许使用任何类型的方法(我希望我说的正确)或像 range 这样的内置方法

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

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

   return -1

我认为如果你不能使用 enumerate 你应该不能使用 range

如果将 count+=1 移动到 for value 之后的行,则列表将索引为 1,否则索引为零

于 2012-12-17T00:37:26.103 回答