问题是如何编写一个程序来测量字符在python中以一般化的方式出现在字符串中的次数。
我写的代码:
def countLetters(str, ch):
count=0
index=0
for ch in str:
if ch==str[index]:
count=count+1
index=index+1
print count
当我使用此函数时,它会测量字符串的长度,而不是字符串中字符出现的次数。我做错了什么?编写此代码的正确方法是什么?
答案 0 :(得分:5)
你正在覆盖'ch'变量:
def countLetters(str, ch):
# ^ the character you are looking for
count=0
index=0
for ch in str:
# ^ the string character you are trying to check
if ch==str[index]: # ???
count=count+1
index=index+1
print count
(另外,返回值通常比打印它更有用。)
内置方法是str.count:
"aaabb".count("a") -> 3
如何重写代码:
def countLetters(search_in, search_for):
count = 0
for s in search_in: # iterate by string char, not by index
if s==search_for:
count += 1
return count
和快速的pythonic替代品:
def countLetters(search_in, search_for):
return sum(1 for s in search_in if s==search_for)
答案 1 :(得分:2)
从逻辑上思考运行代码时会发生什么:由于循环中的测试在第一次迭代中成功,因此每次都能保证成功!您只是检查Python中的迭代是否有效。
正确的配方是
def count(s, input):
count = 0
for c in s:
if c == input:
count += 1
或者,相当于
def count(input):
return sum(c == input for c in s)
但你也可以这样做:
s.count(c)
答案 2 :(得分:0)
你的循环错了。
这应该有效:
for s in str:
if ch == s:
...
这种方式index
变量将不会被使用,您可以删除它。如果您想使用index
,请将for
更改为:
for index in range(len(str)):
... (rest is OK but ...)
... (do not increase index in loop body)
您还可以通过+=
运算符增加变量,如:
cnt += 1
所以完成的代码将如下所示:
def countLetters(str, ch):
count = 0
for s in str:
if ch == s:
count += 1
print count
答案 3 :(得分:0)
完全未经测试:
def count_letters(s, c):
return sum(1 for x in s if x == c)