2016-10-22 7 views
-3

これは私がこれまで持っているものである:「テキスト」文字列中に文字が何回現れるかを数える関数を書くには?

def count2(char,text): 
    if len(text)==0: 
     return 0 
    else: 
     if char==count2(char,text[:-1]): 
      return (1+count2(char,text[:-1])) 
     else: 
      return False 

それはちょうどfalseになりますが、私はそれぞれの文字に等しい回数に「char」カウントしようとしています

+0

なぜあなたのカウント方法からfalseを返すのですか? falseは何のカウントでもない – khelwood

+1

'char'(' str')と 'count2'(' int'または 'bool')の戻り値を比較するのはなぜですか? – Evert

+0

これは本質的に再帰的な問題ではありません(再帰的に解くことはできますが)。再帰的な部分は、問題の規定された要件ですか? –

答えて

1

ベースケースが正しいように見えます。あなたの再帰的なケースについては、論理を見てみましょう。次の2つのケースが考えられます。

  1. 現在の文字列の最初の文字が探している文字の場合。この場合、文字列の残りの文字の1 +カウントを返す必要があります。
  2. 最初の文字が等しくない場合は、残りの文字列の文字数を返すだけです。

機能は、このように、これはとstring.count()機能を使用することになります達成するために

def count2(char,text): 
    if len(text)== 0: 
     return 0 
    count = 1 if text[0] == char else 0 
    return count + count2(char, text[1:]) 
0

ベストな方法となり:

>>> 'engineering'.count('e') 
3 

しかし、私はそれはいくつかの課題の一部であると考えています。

def numberofcharacters(my_char, my_string): 
    if my_string: 
     if my_char == my_string[0]: 
      return 1 + numberofcharacters(my_char, my_string[1:]) 
     else: 
      return numberofcharacters(my_char, my_string[1:]) 
    else: 
     return 0 

この溶液をさらに簡素化することができるように:

def numberofcharacters(my_char, my_string): 
    return ((my_char == my_string[0]) + numberofcharacters(my_char, my_string[1:])) if my_string else 0 

サンプル実行:

>>> numberofcharacters('e','engineering') 
3 
あなたは 再帰機能を使用するための具体的なので、以下、このように達成するためのサンプルコードはあります
1

PythonにTrue/Falseを1/0として扱うきちんとした方法があるので、次のように書くことができます:

リスト内包を使用
def numberofcharacters(char, text): 
    if len(text) == 0: 
     return 0 
    return (text[-1] == char) + numberofcharacters(char, text[:-1]) 
0

は、物事が明確になります:

def numberofcharacters(my_char, my_string): 
    return len([c for c in my_string if c == my_char]) 
1
def count2(char, text): 
    charCount = 0 
    for i in text: 
     if i == char: 
      charCount += 1 
    return(charCount) 

ここで問題に私の2つのセンス、あまり複雑なソリューションです。

関連する問題