• 【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

  • 相关阅读:
    Python 描述符(descriptor) 杂记
    Celery 使用简介
    异步任务神器 Celery 简明笔记
    高性能框架gevent和gunicorn在web上的应用及性能测试
    Flask + Gunicorn + Nginx 部署
    Mysql查看最大连接数和修改最大连接数
    配置 influxDB 鉴权及 HTTP API 写数据的方法
    Java 字符串拼接 五种方法的性能比较分析 从执行100次到90万次
    linux端口开放指定端口的两种方法
    java自带的监控工具VisualVM一
  • 原文地址:https://www.cnblogs.com/chooperman/p/14555724.html
Copyright © 2020-2023  润新知