1

任务:

返回cstring中字符的出现次数s,忽略大小写。使用循环。不要使用内置的字符串方法count,它会做类似的事情。这个想法是学习编写循环。s比较with的字符时应忽略大小写c

我的尝试:

 def countletter(s, c): #BAD
     count = 0
     for c in s:
        if c == c:
        count += 1
        return count

我在正确的轨道上吗?当我在主要测试它时,我似乎得到了一些断言错误......

4

5 回答 5

2

return在错误的地方。因此,您的函数实际上仅在一次迭代后才返回。

此外,您不应c在 for 循环中使用变量名,而应使用一些不同的变量,因为它将c函数调用中收到的值替换为for-loop.

def countletter(s, c): #BAD
    count = 0
    for x in s:
        if x.lower() == c.lower():
            count += 1
    return count


print countletter("abcdefFf","F") #prints 3
print countletter("a","A")        #prints 1
于 2012-10-27T18:57:50.820 回答
2

除了上面的答案之外,Python 中还有一个内置的方法计数。你可以在你的项目中使用它,如果这个功能不是家庭作业等。(哦,我现在看到了,这是一个家庭作业。但是额外的信息是无害的。:))

"baris".count("b")

返回 1

于 2012-10-27T19:01:23.037 回答
0

如果你比较你c定义的变量,for c in s:你总是会得到真实的。因此,您的比较应该看起来像c == 'c'(您可以弄清楚如何进行不区分大小写的检查)并且您的退货缩进不正确

于 2012-10-27T18:58:44.190 回答
0

return 语句的位置是错误的。删除四个空格(或您使用的选项卡)

于 2012-10-27T19:01:56.937 回答
0

就像在内置count()方法之外执行此操作的另一个示例一样,可以使用生成器表达式和sum()内置方法:

>>> def countletter(s, c):
...     return sum(x.lower() == c.lower() for x in s)
... 
>>> countletter("abcdefFf", "F")
3
>>> countletter("a", "A")
1

我们所做的是生成一个TrueFalses 的生成器(True字符匹配的地方)。sum()然后会给我们计数,就像True1Python 中一样,并且False0

>>> True == 1
True
>>> False == 0
True
于 2012-10-27T20:38:15.900 回答