我误解了 continue 声明吗?

Do I misunderstand the continue statement?

我正在尝试测试列表中的表情符号。这是练习:

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

笑脸规则:

除提到的字符外,不允许使用其他字符。

有效的笑脸示例:
:) :D ;-D :~)
无效的笑脸:
;( :> :} :]**

由我的代码编辑的值 return 总是 0 或整个列表的长度。就好像我的布尔眼睛、鼻子、嘴巴在我的 for 循环开始时从未被重新分配 False 的值。

怎么回事?

这是我的程序:

def count_smileys(arr):

    count = 0
    for smile in arr:
        eye = False
        nose = False
        mouth = False
        if len(smile) == 2:
            if smile[0] == ":" or ";":
                eye = True
            else:
                continue
            if smile[1] == ")" or "D":
                mouth = True
            else:
                continue
            if eye and mouth:
                count += 1
        if len(smile) == 3:
            if smile[0] == ":" or ";":
                eye = True
            else:
                continue
            if smile[1] == "-" or "~":
                nose = True
            else:
                continue
            if smile[2] == ")" or "D":
                mouth = True
            else:
                continue
            if eye and nose and mouth:
                count += 1
    return count

print(count_smileys([';]', ':[', ';*', ':$', ';-D']))

你误解的是 or 声明。

当你写:

if smile[0] == ":" or ";":

测试的第一个表达式是smile[0] == ":"。如果那是 False 则测试第二个表达式,在这种情况下,它只是 ";"。通过在 Python shell:

中尝试,您可以看到这总是计算为 True
>>> bool(";")
True
>>> bool(False or ";")
True

因此您的 or 语句应该改为:

if smile[0] == ":" or smile[0] == ";":

您已经完成了所有 or 语句,因此您需要修正这些语句。