codingbat python 字符串计数

问题描述 投票:0回答:9

如果字符串“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

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

python string
9个回答
1
投票

只需使用

count
方法来计算字符串出现的次数。

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

您需要在此代码之前添加一个条件,否则如果输入字符串中不存在

true
cat
,则上述代码应返回
dog

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

1
投票

这可行:

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

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

0
投票

这是一个单行解决方案:

return str.count('cat') == str.count('dog')

在这种情况下不需要这段代码

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

因为你将 count1 和 count2 初始化为 0 那么如果单词中没有狗或猫它们是相等的,它们不会增加

也在这段代码中

if count1 == count2:
    return True
else:
    return False

你可以减少到这个

return count1 == count2

它将看到该表达式的布尔值 如果 count1 == count2 返回 true,否则返回 false


0
投票

这是我的解决方案..

def cat_dog(str):
  l = len(str)
  l1 = len(str.replace('cat','#'))
  l2 = len(str.replace('dog','#'))
  t1 = (l-l1)
  t2 = (l-l2)
  if t1 == t2:
     return True
  return False  

-1
投票
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
是内置类型,您可能需要使用它,但不能使用它,因为您已经重新分配了它。


-1
投票

函数中

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

-1
投票

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

第 8 行编辑 1:
它需要:“for i in range(len(str)-1):”,而不是“for i in range(len(str)-2):” - 因为单词 cat 和dog 都是 3 个字母的单词,并且 for捕获“cat”和“dog”的每个组合,我们需要从倒数第三个字母开始计数。因此“-2”而不是“-1”

编辑2第12,13,14,15行:
缩进不正确。它在值 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

-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
© www.soinside.com 2019 - 2024. All rights reserved.