• 【python解题笔记20210318】CodeWars:Count the smiley faces!


    题目

    内容:根据要求的规则,检测输入的列表中的符号,能否组成笑脸,输出笑脸的总数量

    链接:https://www.codewars.com/kata/583203e6eb35d7980400002a/train/python

    截图:

       

    解题

    思路: 

    1、最重要是搞清楚如何根据不同数量符号组合的算法,检测出能否合成笑脸;

    2、然后再看是否包含检测出笑脸外的符号,若有,也不符合规范;

    3、使用re.sub(pattern, repl, string, count=0, flags=0)函数,巧妙的将组成笑脸的字符串全部替换成空字符串,起到删除组成笑脸字符串的作用,若此番处理后包含其他字符串则不符合笑脸组成规范;

    结果:

       

    源码:

    import re
    
    def count_smileys(arr):
        """
        根据要求的规则,检测输入的列表中的符号,能否组成笑脸,输出笑脸的总数量
        :param arr: 输入的笑脸列表,如[':D',':~)',';~D',':)']
        :return: 检测后笑脸的数量 ,如上述例子中结果为4
        """
        count=0
        if arr==[]:
            return count
        else:
            for i in arr:
                print(i)
                # 第一层检测:通过算法检测字符串中的符号能否组成笑脸
                if i.count(':')+i.count(';')==1 and i.count('D')+i.count(')')==1 and i.count('-')+i.count('~')<=1:
                    #第二层检测:检测是否存在组成笑脸外的其他符号,若存在则不符合笑脸组成规则。
                    i = re.sub("[-:;)D~]", '', i)   # 这里注意sub函数中减号字符'-'要放在第一个 不然会被当作算术操作符
                    if len(i)==0:
                        count+=1
                    pass
                pass
            return count
        pass
    
    
    print(count_smileys([':D',':~)',';~D',':)']))

    知识点

    1、要考虑算法问题,十分重要!!!

    2、re.sub()函数算法,可以替换字符串中的指定字符

    re.sub(pattern, repl, string, count=0, flags=0)

    参数:

      • pattern : 正则中的模式字符串。
      • repl : 替换的字符串,也可为一个函数。
      • string : 要被查找替换的原始字符串。
      • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

    参考资料:

    https://zhuanlan.zhihu.com/p/114457332

  • 相关阅读:
    如何定义开发完成?(Definition of Done)
    Git协同工作流介绍
    Git常用命令拾遗
    搭建基于Docker社区版的Kubernetes本地集群
    Mqtt学习指南
    JavaWeb 学习总结
    异常:org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
    MySQL 插入中文错误:java.sql.SQLException: Incorrect string value:
    Servlet 中文乱码问题解析及详细解决方法
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/chooperman/p/14555724.html
Copyright © 2020-2023  润新知