我是否误解了continue语句?

问题描述 投票:-2回答:1

我正在尝试测试列表中的笑脸。这是练习:

**给定一个数组(arr)作为参数,完成功能countSmileys,该函数应返回笑脸的总数。笑脸规则:

-每个笑脸必须包含一双有效的眼睛。眼睛可以标记为:或;

-笑脸可以有鼻子,但不是必须的。鼻子的有效字符为-或〜

-每个笑脸都必须有一个笑脸,嘴上应标有)或D。

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

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

我的代码返回的值始终为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']))
python-3.x for-loop continue
1个回答
0
投票

您误解的是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语句,因此您需要修复这些语句。

© www.soinside.com 2019 - 2024. All rights reserved.