我想我有解决这个问题的方法,但是当我在pythonfiddle.com或Canopy上运行时,没有任何问题出现。
问题是:
给定一个字符串,返回a的计数次数 子串长度2出现在字符串中,也作为最后2个字符 字符串,所以“hixxxhi”产生1(我们不计算结束 子)。
last2('hixxhi') → 1 last2('xaxxaxaxx') → 1 last2('axxxaaxx') → 2
我的解决方案是:
def last2(str):
test2 = str[-2:]
start = 0
count = 0
while True:
if str.find(test2, start, -2) > 0:
count +=1
start = str.find(test2, start, -2) + 1
else:
break
return count
当我调用函数last2
时,我什么都没得到。有什么我想念的吗?
答案 0 :(得分:1)
str.find()
会返回-1
。如果在字符串的 start 处找到匹配项,则会返回0
,但您的测试条件不包括此情况。
if str.find(test2, start, -1) > 0:
您也希望匹配0
:
if str.find(test2, start, -2) >= 0:
您可以避免在此处使用str.find()
两次,并且您希望允许一个但最后字符也计算在内(xxxx
有xx
在匹配最后两个字符之外两次)。最后但并非最不重要的是,如果字符串短于长度3,则永远不会有任何匹配:
def last2(value):
if len(value) < 3:
return 0
test2 = value[-2:]
start = 0
count = 0
while True:
index = value.find(test2, start, -1)
if index == -1:
break
count +=1
start = index + 1
return count
我也避免在这里遮蔽内置的str()
函数。
演示:
>>> last2('hixxhi')
1
>>> last2('xaxxaxaxx')
1
>>> last2('axxxaaxx')
2
答案 1 :(得分:0)
你有一个错误。如果字符串不包含子字符串,则str.find
返回-1,但如果子字符串位于字符串的开头,则返回0。请注意,您的方法在第三个示例中正常工作。
应该是:
if str.find(test2, start -2) >= 0: