您会得到一个由小写字母组成的字符串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
答案 0 :(得分:2)
您的逻辑实际上非常接近。唯一的问题是i
是一个整数,因此比较i=="d" and i+1=="o" and i+3=="e"
将始终为false。您可能会在i==0
到0 !="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))
返回从0
到length_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)))
查找列表中的模式的所有匹配项,然后获取列表的计数,您将获得总督或自由度或任何此类数字的数量