Python 3.x 返回字符串“";代码“;出现在给定字符串中的任何位置,但we';我什么都可以接受

Python 3.x 返回字符串“";代码“;出现在给定字符串中的任何位置,但we';我什么都可以接受,python-3.x,Python 3.x,问题: 返回字符串“code”在给定字符串中任何位置出现的次数,除非我们接受任何字母作为“d”,所以“cope”和“cooe”计数。 正如上面提到的问题,我试图用下面的代码给我错误 def count_code(str): count=0 for i in range(len(str)-3): if 'code' == str[i:4] or 'cope' in str[i:4] or 'cooe' in str[i:4]: count +=1 return c

问题: 返回字符串“code”在给定字符串中任何位置出现的次数,除非我们接受任何字母作为“d”,所以“cope”和“cooe”计数。 正如上面提到的问题,我试图用下面的代码给我错误

def count_code(str):
  count=0
  for i in range(len(str)-3):
    if 'code' == str[i:4] or 'cope' in str[i:4] or 'cooe' in str[i:4]:
       count +=1
  return count
而下面指定的其他代码给出了正确答案。但我不明白我的第一个代码出了什么问题

def count_code(str):
  count=0
  for i in range(len(str)-3):
    if str[i:i+2] == 'co' and str[i+3]=='e':
      count +=1
  return count
  • 您正在检查
    code/cope/cooe
    ,但任何字母都意味着还有23种可能的变体您没有检查

  • 应该是:

    if 'code' == str[i:i+4] or 'cope' in str[i:i+4] or 'cooe' in str[i:i+4]:
        count +=1
    

  • 因此,当您是字符i时,您将检查接下来的4个字符是否匹配。现在您只检查字符号i与字符号4(固定)是否匹配。

    问题在于:
    如果str[i:4]中的'code'==str[i:4]或'cope'或str[i:4]中的'cooe':


    本例中的切片语法是
    iterable[start:stop]
    。通过执行
    str[i:4]
    ,只要
    i
    的值大于4,您就会得到一个错误。我想你想做的是
    str[I:I+4]
    (这仍然是不正确的)。

    你的错误的具体原因和需要立即修复的问题已在其他答案中正确确定。然而,我认为您的代码需要更基本的重新设计。通过尝试编写一个计算子字符串出现次数的算法,您正在“重新发明轮子”,而使用标准库中的现有解决方案,计算子字符串的出现次数会容易得多

    .count
    方法可用于计算子字符串的出现次数。由于共有26个字母可能与一起出现,因此需要计算26个不同的子字符串,因此使用循环来计算它们是有意义的:

    def count_代码:
    字母表='abcdefghijklmnopqrstuvxyz'
    总数=0
    对于字母表中的字母:
    总计+=s.count('co'+字母+'e')
    返回总数
    
    或者使用
    sum
    功能:

    def count_代码:
    字母表='abcdefghijklmnopqrstuvxyz'
    返回和(字母表中字母的s.计数('co'+字母+'e'))
    
    另一个简单的解决方案是使用正则表达式
    co[a-z]e
    查找出现的情况,并
    len
    对其进行计数:

    重新导入
    def计数_代码:
    返回len(关于findall('co[a-z]e',s))
    
    我认为这是一个很好的正则表达式用例

    import re
    
    string = """
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    code
    Vivamus ac justo velit.
    cope
    Aliquam consectetur nisl nec vestibulum luctus.
    cooe
    Quisque aliquet tortor id varius mollis.
    cole
    Sed ipsum libero, facilisis eget mollis et, maximus vitae ipsum.
    come
    """
    matches = re.findall(r"co[a-zA-Z]e", string)
    print(len(matches))
    

    返回字符串“code”在给定字符串中任何位置出现的次数,除非我们接受任何字母作为“d”,所以“cope”和“cooe”计数


    测试空白是没有必要的-问题是要计算它“出现在给定字符串的任何地方”的次数,不一定被空白或单词边界包围。但是
    也会匹配非字母字符,问题只会说“我们接受任何字母”。
    def count_code(str):
      c1=0
      for i in range(len(str)-3):
        if str[i:i+2] =='co' and str[i+3]=='e':
          c1 +=1
      return c1