【问题标题】:How to write a function to count how many times a character occurs in a string?如何编写一个函数来计算一个字符在字符串中出现的次数?
【发布时间】:2017-03-04 23:45:02
【问题描述】:

这是我目前所拥有的:

def count2(char,text):
    if len(text)==0:
        return 0
    else:
        if char==count2(char,text[:-1]):
            return (1+count2(char,text[:-1]))
        else:
            return False

它只会变成假,但我试图计算“char”等于“text”的每个字符的次数。

【问题讨论】:

  • 为什么你的计数方法返回 false? false 算不了什么
  • 为什么将charstr)与count2intbool)的返回值进行比较?
  • 这不是一个固有的递归问题(尽管它可以递归解决)。递归部分是问题的规定要求吗?
  • 'engineers'.count('e') 返回3 `

标签: python python-3.x recursion


【解决方案1】:

您的基本情况看起来是正确的。对于您的递归情况,让我们看一下逻辑。有两种可能的情况:

  1. 如果当前字符串的第一个字符是您要查找的字符。在这种情况下,您应该返回 1 + 字符串其余部分中的字符数。
  2. 如果第一个字符不相等,那么您应该只返回字符串其余部分中字符的计数。

函数就这样变成了

def count2(char,text):
    if len(text)== 0:
        return 0
    count = 1 if text[0] == char else 0
    return count + count2(char, text[1:]) 

【讨论】:

    【解决方案2】:

    Python 有一种巧妙的方式将 True/False 视为 1/0,因此您可以简单地编写如下内容:

    def numberofcharacters(char, text):
        if len(text) == 0:
            return 0
        return (text[-1] == char) + numberofcharacters(char, text[:-1])
    

    【讨论】:

      【解决方案3】:
       def count2(char, text):
          charCount = 0
          for i in text:
              if i == char:
                  charCount += 1
          return(charCount)
      

      这是我对此事的两种看法,一种不太复杂的解决方案。

      【讨论】:

        【解决方案4】:

        实现这一点的最佳方法是使用string.count() 函数作为:

        >>> 'engineering'.count('e')
        3
        

        但我相信这是某些任务的一部分。由于您专门使用 recursive 函数,以下是实现此目的的示例代码:

        def numberofcharacters(my_char, my_string):
            if my_string:
               if my_char == my_string[0]:
                    return 1 + numberofcharacters(my_char, my_string[1:])
               else:
                    return numberofcharacters(my_char, my_string[1:])
            else:
               return 0
        

        这个解决方案可以进一步简化为:

        def numberofcharacters(my_char, my_string):
            return ((my_char == my_string[0]) + numberofcharacters(my_char, my_string[1:])) if my_string else 0
        

        示例运行:

        >>> numberofcharacters('e','engineering')
        3
        

        【讨论】:

          【解决方案5】:

          使用列表推导使事情变得清晰:

          def numberofcharacters(my_char, my_string):
              return len([c for c in my_string if c == my_char])
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-09-30
            • 2023-02-04
            • 1970-01-01
            • 2021-07-10
            • 2014-11-14
            • 2011-07-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多