说明
给定一个数组(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
但未通过所有测试
答案 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))