定义一个函数immPairs(..),该函数接收一个字符串,并返回字符串中两个相同字符紧接在另一个后面的次数。如果有两个以上的相同字符一个接一个地出现,则应计算所有立即数对。
例如:
immPairs(“abxxab88ef”)
应该返回2,因为有两个立即数对"xx"one_answers"88"
immPairs(“abxxxab88ef”)
应该返回3,因为有三个立即数对"xx"、"xx"one_answers"88"
例如,以下代码片段:
print immPairs("abxxab88ef")
应产生输出:2
这就是我所拥有的,我走对了吗?如果是这样的话,我不知道该用什么合适的"如果"语句。
def immPairs(st):
count = 0
l = list(st)
for char in l:
if char == char:
count = count + 1
return count
print immPairs("abxxab88ef")
您可以编写:
def immPairs(st):
count = 0
for i in range(len(st) - 1):
if st[i] == st[i + 1]:
count += 1
return count
这通过检查每个位置i
和i + 1
来遍历字符串,以查看它们是否相等。如果是,那么你就找到了一双。这意味着您只需要在最后一个字符之前检查i
,因为最后一对是由字符串的最后两个字符组成的。
这似乎适用于单行解决方案:
In [1]: s = 'abxxxab88ef'
In [2]: sum((s[i]==s[i-1] for i in range(1,len(s)-1)))
Out[2]: 3
(在迭代除第一个字符外的所有字符的生成器中,计算一个字符与其前一个字符相同的次数)。
您发布的代码的主要错误是char == char
始终是True
。还要注意,字符串是可迭代的,因此不需要将str
转换为list
。要按自己的方式进行,可以使用enumerate
:
def immPairs(st):
count = 0
for i, char in enumerate(st[1:]):
if char == st[i]:
count = count + 1
return count
print immPairs("abxxab88ef")
这里,enumerate
生成对(0, 'b')
、(1, 'x')
等,因此索引i
实际上是字符串中前一个字符的索引。