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

これは基本的にstring.find()メソッドと同じです:)この質問を解決するためにPythonの基本以上のものを使用することは許可されていないことを予期しています...

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

さて、これを分解しましょう。文字のリスト、別名文字列が表示されます。したがって、タスクは、リスト内で検索キーが最初に出現するまで、このリストを反復(=ループ)することです。オカレンスにヒットしたら、その位置を戻します。これもループを中断します。検索キーが見つからずにループを終了した場合は、return -1(BTW; NonePythonの方が理にかなっています)。

Pythonenumerateには、リストを受け取り、要素インデックスと要素自体を含むタプルのリストを返すという組み込み関数が用意されています。すなわち

['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

enumerateの使用が許可されていない場合は、「長い」道もあります。

def firstOccur(key, string):
    for i in range(len(string)):
        if key == string[i]:
            return i
    return -1
于 2012-12-17T00:12:39.117 に答える
0

Pythonでは、次のような文字列をループする必要はありませんfor c in range(b)。文字列から各文字を取得するだけですfor character in s。文字列をループして、各文字を順番に表示します。

if d != e: return(-1)-あなたが望むものではないキャラクターをヒットするたびに、あなたは戻ってきます。また、chがキャラクターの場合、は必要ありませんch[0]

Pythonには、と呼ばれる非常に便利な関数が付属していますenumerateiterableこれにより、の値とその位置が一覧表示されます。これがどのように見えるかの概要です:

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

このようなことを試すことができます。インデックスがゼロの位置を返します(つまり、最初の文字の場合は0、2番目の文字の場合は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

それを行うためのさらに簡単な方法は、

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

enumerateを使用できない場合は、rangeを使用できないはずだと思います

count + = 1を値の次の行に移動すると、リストは1でインデックス付けされます。それ以外の場合は、ゼロでインデックス付けされます。

于 2012-12-17T00:37:26.103 に答える