尝试编写一个程序来计算彼此相邻的匹配字母对的数量("密西西比"包含3)并输出该数字。
不确定我做错了什么,但我必须使用字符串,while循环和变量作为代码的一部分。它似乎适用于第一行并输出3,然后抛出一个IndexError:字符串索引超出第二个字符串示例的范围。
def count_pairs(s):
index = 0
pairs = 0
letter = 0
nextletter = 0
while index < len(s):
letter = s[index]
index = index + 1
nextletter = s[index]
if letter == nextletter:
pairs = pairs + 1
index = index + 1
else:
index = index + 1
return pairs
print(count_pairs("ddogccatppig"))
print(count_pairs("dogcatpig"))
print(count_pairs("xxyyzz"))
print(count_pairs("a"))
答案 0 :(得分:5)
您正在重新实现groupby
的功能。使用库函数有助于避免错误
>>> from itertools import groupby
>>> sum(len(tuple(g)) > 1 for k, g in groupby("ddogccatppig"))
3
无论如何,我认为for
循环更合适
>>> s = "ddogccatppig"
>>> sum(s[idx] == j for idx, j in enumerate(s, 1) if idx != len(s))
3
如果您不想使用for
sum
循环
答案 1 :(得分:2)
在您的while循环中,您正在访问s[index]
和s[index + 1]
。
然后你应该改变:
while index < len(s):
为:
while index + 1 < len(s):
或等同于:
while index < len(s) - 1: