将四个字母的单词与一个任意字符匹配

时间:2019-01-12 08:11:19

标签: python python-3.x

您会得到一个由小写字母组成的字符串str。您需要计算单词doge在字符串中出现的次数。另外,g中的doge可以用a-z中的任何字母代替,因此dope也是有效的。

这个问题出现在我正在查看的网站上。由于该站点没有选择来讨论问题,因此我在这里寻求帮助:

def doge_count(str):
    count=0
    for i in range (0,len(str)):
        if (i=="d" and i+1=="o" and i+3=="e"):
            count= count+1
    return count

对于输入:

2
dog
dogedopedose

您的输出是:

0
0

4 个答案:

答案 0 :(得分:2)

您的逻辑实际上非常接近。唯一的问题是i是一个整数,因此比较i=="d" and i+1=="o" and i+3=="e"将始终为false。您可能会在i==00 !="d"时获得比赛。

解决方法是按照您的意图使用i索引到str

if str[i:i+2] == "do" and str[i+3] == "e":

您还希望以一种不会超出字符串结尾的方式循环:

for i in range(len(str) - 3):

更健壮的解决方案是使用regular expressions。以下模式匹配您想要的字符串:

do[a-z]e

您可以使用re.findall进行计数:

count = len(re.findall('do[a-z]e]', str))

答案 1 :(得分:0)

代码无法正常工作的原因是,您正在检查以下代码行中的整数是否等于字符串:i=="d"

以下代码行:for i in range (0, len(str))返回从0length_of_string - 1的整数。

您需要做的是检查第i位的字符串是否等于您想要的搅动。像:str[i] == "d"

按照您的逻辑,这将是您代码的正确版本:

def doge_count(str):
    count = 0
    for i in range(0, len(str)-3):
        if str[i] == "d" and str[i+1] == "o" and str[i+3] == "e":
            count = count+1
    return count


print(doge_count('dog'))
print(doge_count('dogedopedose'))

答案 2 :(得分:0)

您可以使用列表理解:

>>> [s[i:i+4] for i in range(len(s)-3) if s[i:i+2]=='do' and s[i+3]=='e']
['doge', 'dope', 'dose']

答案 3 :(得分:0)

test_patterns='do[a-z]e'
phrase = 'this is doze but Doze again dore then dofe'
list_matches = re.findall(test_patterns,phrase.lower())
print('The number of d(any alphabet)ze : {frequency}'.format(frequency=len(list_matches)))

查找列表中的模式的所有匹配项,然后获取列表的计数,您将获得总督或自由度或任何此类数字的数量