题目
内容:根据要求的规则,检测输入的列表中的符号,能否组成笑脸,输出笑脸的总数量
链接: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