2016-09-20 15 views
-7
def countConsonant (s): 

    """Count consonants. 

    'y' and 'Y' are not consonants. 

    Params: s (string) 
    Returns: (int) #consonants in s (either case) 
    """ 

    # do not use a brute force solution: 
    # think of a short elegant solution (mine is 5 lines long); 
    # do not use lines longer than 80 characters long 

    # INSERT YOUR CODE HERE, replacing 'pass' 
    countConsonant = 0 
    for index in s: 
     if index == 'bcdfghjklmnpqrstvwxyz': 
      countConsonant += 1 
    return countConsonant 

print (countConsonant ('"Carpe diem", every day.')) # should return 8 
+6

です。デバッグのヘルプ(「**なぜこのコードは動作しないのですか?**)」には、目的の動作、特定の問題またはエラー、およびそれを再現するのに必要な最短コードが含まれている必要があります。 **質問自体に**。 **明確な問題文**のない質問は他の読者には役に立たない。参照:[最小限で完全で検証可能なサンプルの作成方法](http://stackoverflow.com/help/mcve) – Biffen

答えて

3

==は平等をチェックし、それはおそらくあなたが望むものではありません。メンバシップを確認するには、in演算子を使用する必要があります。この場合、文字列内の文字のメンバシップです。 xは、会員がyに存在している場合は、オペランドまたは1つがチェックされている

if x in y: 

:それは、この一般的な構文に従います。この場合には、これにあなたのif文を交換することを適用する:特定の文字が与えられた子音の文字列である場合

if index in 'bcdfghjklmnpqrstvwxyz': 

これは、チェックします。また、注意すべきことは、小文字のみをチェックすることです。

if index.lower() in 'bcdfghjklmnpqrstvwxyz': 

これはチェックするとき、文字列の小文字を行います:それはCarpe diemCは、ケースの試みを無視するには9の結果を与えて無視されることを意味します。あなたはs内のすべての文字を反復処理しているの文

for index in s:

0

。だから、条件

if index == 'bcdfghjklmnpqrstvwxyz':

はこれまでFalseに評価し、機能はすべてのケースでは0を返します。

文字列内の文字のメンバーシップをチェックするには、==ではなくin演算子を使用する必要があります。この演算子は値の等しいかどうかをチェックします。

アルゴリズムが大文字小文字を区別しない場合は、入力を小文字にするか、すべての対応する大文字を文字列'bcdfghjklmnpqrstvwxz'に追加することができます。 'y''Y'はあなたの要件に応じて子音ではないので、文字列'bcdfghjklmnpqrstvwxyz'からyを削除する必要があります。最後のコードは

def countConsonant (s): 

    """Count consonants. 

    'y' and 'Y' are not consonants. 

    Params: s (string) 
    Returns: (int) #consonants in s (either case) 
    """ 
    countConsonant = 0 
    for index in s.lower(): 
     if index in 'bcdfghjklmnpqrstvwxz': 
      countConsonant += 1 
    return countConsonant 

print (countConsonant ('"Carpe diem", every day.')) # should return 8 
関連する問題