计算单词出现在字符串中的次数

时间:2020-04-12 05:28:50

标签: python

我从蝙蝠编码开始练习,问题是要查找字符串中“编码”一词出现的次数,但是“编码”中的字母“ d”可以代替任何字母。因此,“代码”的计数为1,“应付”的计数也为1。我编写了一些代码,但它不起作用。我不明白为什么它不起作用。该函数为每个输入返回0。这是我尝试过的https://codingbat.com/prob/p186048

的链接
def count_code(str):
     count = 0
     str = str.lower()
     for x in str:
         if x == ‘c’ and str.find(x) + 1 == “o” and str.find(x) + 3 == “e”:
            count += 1
     return count 

4 个答案:

答案 0 :(得分:3)

如Tim所述,如果您需要更简单的方法(不是最有效的方法,而是一种方法),我会在此类任务中使用正则表达式:

import string


text = 'elephant code joke cole coke man'
total = 0
for letter in string.ascii_lowercase:
    total += text.count(f'co{letter}e')
print(f'{total}')

请注意,在您的解决方案尝试中,有以下内容:

for x in str:

除了在这种情况下应避免名称冲突str的事实之外,对于大小为1000个字符的文本,您将进行1000次迭代,使用此方法减少为26次迭代(字母字母)方法。

答案 1 :(得分:1)

我会在这里使用re.findall,然后只计算找到的匹配项数:

inp = "blah code blah cole blah core blah"
print(len(re.findall(r'\bco[a-z]e\b', inp)))    # prints 3

此处使用的正则表达式模式为\bco[a-z]e\b,它与任何单词code匹配,其中第三个字母d实际上可以是任何字母。

答案 2 :(得分:0)

您已经混淆了索引和字符内容:

str.find(x) + 1 == ‘o’

这可能永远不会成立:您的find调用将返回字符串中第一个此类字符的位置。您添加1到该索引。您如何想象这个整数和可以等于字符“ o”?整数和字符不能相等。

您需要备份并重新设计逻辑。当您这样做时,请参阅此可爱的参考文献debugging help。您需要学习如何在自己的代码中跟踪问题。

答案 3 :(得分:0)

为此使用正则表达式,它是快速,方便且简短的代码。

#CODE
import re

#findall() Returns a list containing all matches
str="cole code cope"
result = re.findall("co.e", str) 
print(len(result))
#END

希望这可以满足您的要求。