1

部分文字列「ou」が文字列に現れる回数を返す再帰関数 (パラメーターが 1 つだけ) を作成する方法を見つけようとしています。私が混乱しているのは、len 以外の組み込み文字列関数、またはインデックス作成とスプライシングのための文字列演算子 [] と [:] の使用が許可されていないことです。そのため、組み込みの find 関数を使用できません

このようなものを見た覚えがありますが、2 つのパラメーターを使用し、find() メソッドも使用しています。

def count_it(target, key):
  index = target.find(key)
  if index >= 0:
    return 1 + count_it(target[index+len(key):], key)
  else:
    return 0
4

2 に答える 2

2

非常に非効率的ですが、機能するはずです:

def count_it(target):
    if len(target) < 2:
        return 0
    else:
        return (target[:2] == 'ou') + count_it(target[1:])

オンラインで動作することを確認してください:ideone

これは、投稿したコードと基本的に同じ考え方ですがfind、次の一致にジャンプするために使用するのではなく、文字列内を一度に1文字だけ移動する点が異なります。

于 2011-11-01T20:24:48.833 に答える
0

これを試してください。一般的なケース(「ou」だけでなく、任意のキーの値)で機能します。

def count_it(target, key):
    if len(target) < len(key):
        return 0
    found = True
    for i in xrange(len(key)):
        if target[i] != key[i]:
            found = False
            break
    if found:
        return 1 + count_it(target[len(key):], key)
    else:
        return count_it(target[1:], key)
于 2011-11-01T20:42:41.520 に答える