我的代码出了什么问题? countconsonant

时间:2016-09-20 04:49:41

标签: python

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

2 个答案:

答案 0 :(得分:3)

==检查是否平等,这可能不是你想要的。您必须使用in运算符来检查成员资格,在这种情况下是字符串中字符的成员资格。它遵循这种通用语法:

if x in y:

其中x是操作数或正在检查的操作数,y中是否存在成员资格。将此应用于此案例,请将if语句替换为:

if index in 'bcdfghjklmnpqrstvwxyz':

然后检查特定字符是否在给定的辅音字符串中。另外,有一点需要注意,你只检查小写。这意味着C中的Carpe diem被忽略,结果为9.忽略大小写尝试:

if index.lower() in 'bcdfghjklmnpqrstvwxyz':

这会在检查时将字符串设为小写。

答案 1 :(得分:0)

声明

for index in s:

你正在迭代s中的所有角色。条件

if index == 'bcdfghjklmnpqrstvwxyz':

永远评估为False,并且函数在每种情况下都返回0。

要检查字符串中字符的成员资格,您需要使用in运算符而不是==,它会检查值的相等性。

如果您的算法与案例无关,则可以小写输入或将所有相应的大写字母添加到字符串'bcdfghjklmnpqrstvwxz'。由于'y''Y'不是您要求的辅音,因此您需要从字符串y中删除'bcdfghjklmnpqrstvwxyz'。你的最终代码是

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