计算数组中的笑脸

时间:2017-04-20 07:56:51

标签: python-3.x

说明

给定一个数组(arr)作为参数,完成函数countSmileys,它应该返回笑脸的总数。

笑脸规则: - 每个笑脸必须包含一双有效的眼睛。眼睛可以标记为:或; - 一个笑脸可以有一个鼻子,但它没有。鼻子的有效字符是 - 或〜 - 每张笑脸必须有一个微笑的嘴,应标有(或)D。

有效的笑脸例子: :):D ;-D:〜) 笑脸无效: ;(:>:}:]

这是我的代码:

   def count_smileys(arr):
        if arr == []:
            return 0
        count = 0
        for c in arr:
            if c == ':)':count+=1

            if  c ==';-D': count+=1

            if c == ':~)': count+=1

            if c == ':D': count +=1

         return count   

但未通过所有测试

2 个答案:

答案 0 :(得分:1)

正则表达式最适合该问题

import re
def count_smileys(arr):
    return len(re.findall('[:;][-~]?[)D]', str(arr)))
  • [:;] 表示,我们只需要:或;作为眼睛(根据问题)。
  • [-〜]?表示,要么我们想要-或〜作为鼻子,要么我们不想要(根据问题)。

                       ? is used to match 0 or 1 occurrences.
    
  • [] D] 表示我们想要)或D作为嘴巴(根据问题)。

findall()函数搜索所有有效的笑脸并将其插入到arr中,len()函数对所有笑脸进行计数并返回答案。

答案 1 :(得分:0)

正则表达式可能是最佳解决方案:

import re
def count_smileys(text):
    return len(re.findall('[:;][-~]?[)D]', text))