You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

统计数组内笑脸数量的Python代码返回错误结果原因排查

错误原因分析
  • 未限制合法笑脸的长度:符合规则的笑脸只能是2位(无鼻子)或者3位(带鼻子),你的代码没有做长度校验,会出现两个问题:一是长度≥4的字符串(比如:---))只要首尾符合要求就会被误判;二是如果数组中存在空字符串,访问e[0]、e[-1]会直接触发索引越界报错。
  • 未校验中间位字符:当字符串长度为3时,中间位必须是-或~才算合法鼻子,你的代码会把:x)、;aD这类中间为非法字符的字符串也判定为合法笑脸。

举个测试用例为例:
输入数组为[':)', ';~D', ':x)', '---)', ''],你的代码会返回3(错误统计了:x)),但正确结果应该是2。

修正方案

你可以通过长度判断+字符校验的方式修复:

def count_smileys(arr):
    counter = 0
    valid_eyes = {':', ';'}
    valid_noses = {'-', '~'}
    valid_mouths = {')', 'D'}
    for e in arr:
        length = len(e)
        if length == 2:
            if e[0] in valid_eyes and e[1] in valid_mouths:
                counter +=1
        elif length ==3:
            if e[0] in valid_eyes and e[1] in valid_noses and e[2] in valid_mouths:
                counter +=1
    return counter

也可以用正则匹配更简洁:

import re
def count_smileys(arr):
    pattern = r'^[:;][-~]?[)D]$'
    return sum(1 for s in arr if re.match(pattern, s))

内容的提问来源于stack exchange,提问作者Ryshardoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:24:07