codingbat python字符串计数

时间:2016-02-24 05:58:11

标签: python string

如果字符串“cat”和“dog”在给定字符串中出现的次数相同,则返回True。

这是我正在尝试的问题。我的代码是:

def cat_dog(str):
    count1 = 0
    count2 = 0

if 'dog' and 'cat' not in str:
    return True
for i in range(len(str)-1):
    if str[i:i+3] == 'cat':
        count1 += 1
    if str[i:i+3] == 'dog':
        count2 += 1
    if count1 == count2:
        return True
    else:
        return False

我知道这是不正确的,因为代码似乎没有循环遍历整个字符串并拾起猫狗。不知道如何纠正这个问题。

7 个答案:

答案 0 :(得分:1)

只需使用count方法计算字符串的出现次数。

>>> 'catdog'.count('cat') == 'catdog'.count('dog')
True
>>> 'catdogdog'.count('cat') == 'catdogdog'.count('dog')
False
>>> 

您需要在此代码之前添加条件,否则如果输入字符串中不存在truecat,则上述代码应返回dog

if 'dog' in string or 'cat' in string:
    return string.count('cat') == string.count('dog')

答案 1 :(得分:0)

if 'dog' and 'cat' not in str:

这并不是你认为它做的。 Python将其解释为:

if ('dog') and ('cat' not in str):

第一部分始终为真,因为'dog'是非空字符串,所以它归结为'cat' not in str。因此,您实际上只是检查字符串是否包含'cat'

你想要这样的东西:

if 'dog' not in str and 'cat' not in str:

或等同地:

if not ('dog' in str or 'cat' in str):

或者,如果你有更多的测试要做,这对于一对以上来说更紧凑:

if not any(x in str for x in ('cat', 'dog', 'mouse', 'beaver')):

这会影响函数是否进入循环,所以它可能会让你失望。

另外,不要为变量str命名。 str是内置类型,您可能需要使用它,但因为您已重新分配它而无法使用。

答案 2 :(得分:0)

函数中return的部分不应位于for循环内。这就是循环过早退出的原因

def cat_dog(str):
    count1 = 0
    count2 = 0

    if 'dog' not in str and 'cat' not in str: # <= kindall pointed this out
        return True

    for i in range(len(str)-1):
        if str[i:i+3] == 'cat':
            count1 += 1
        if str[i:i+3] == 'dog':
            count2 += 1

    if count1 == count2:  # <= These shouldn't be part of the for loop
        return True
    else:
        return False

最后4行通常应写为

    return count1 == count2

答案 3 :(得分:0)

您的代码只有2分钟的错误。纠正后,它会给出完美的结果,而无需任何进一步的更改。检查下面。

第8行中的

Edit1:
而不是“ for for in range(len(str)-1):”,它需要:“ for i in range(len(str)-2):”-因为单词cat和dog都是3个字母,所以for要捕获制作“猫”和“狗”的每个单个组合,我们需要从倒数第3个字母开始计数。因此是“ -2”而不是“ -1”

第12、13、14、15行中的Edit2:
缩进不正确。它在值i的第一次迭代后立即比较count1和count2,因此返回错误结果。只需正确的缩进,您的代码就完美了!

检查更正后的代码,而无需其他任何输入。

def cat_dog(str):
    count1 = 0
    count2 = 0

    if 'dog' and 'cat' not in str:
        return True
    for i in range(len(str)-2):
        if str[i:i+3] == 'cat':
            count1 += 1
        if str[i:i+3] == 'dog':
            count2 += 1
    if count1 == count2:
        return True
    else:
        return False

答案 4 :(得分:0)

def cat_dog(str):
    count_of_cat = str.count("cat") 
    count_of_dog = str.count("dog")
    if count_of_cat == count_of_dog:
        return True
    else:
        return False

答案 5 :(得分:0)

这可以工作:

def cat_dog(str):
  counter_cat = 0
  counter_dog = 0
  for i in range(0, len(str)-2):
    if str[i] == 'c' and str[i+1] == 'a' and str[i+2] == 't':
      counter_cat += 1
    elif str[i] == 'd' and str[i+1] == 'o' and str[i+2] == 'g':
      counter_dog += 1
  return counter_cat == counter_dog

答案 6 :(得分:-2)

    def cat_dog(str):

       cat = dog = 0
  
       for i in range(len(str)-2):
          if str[i:i+3] == "cat":
             cat += 1
          if str[i:i+3] == "dog":
             dog += 1
       return cat == dog