CodingBat热身2 Python 2

时间:2013-12-14 18:58:31

标签: python

我想我有解决这个问题的方法,但是当我在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时,我什么都没得到。有什么我想念的吗?

2 个答案:

答案 0 :(得分:1)

如果找不到匹配项,

str.find()会返回-1。如果在字符串的 start 处找到匹配项,则会返回0,但您的测试条件不包括此情况。

if str.find(test2, start, -1) > 0:

您也希望匹配0

if str.find(test2, start, -2) >= 0:

您可以避免在此处使用str.find()两次,并且您希望允许一个但最后字符也计算在内(xxxxxx在匹配最后两个字符之外两次)。最后但并非最不重要的是,如果字符串短于长度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: