我误解了 continue 语句吗?

Posted

技术标签:

【中文标题】我误解了 continue 语句吗?【英文标题】:Do I misunderstand the continue statement? 【发布时间】:2019-11-26 21:37:09 【问题描述】:

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

给定一个数组 (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']))

【问题讨论】:

很难说如果您误解了continue 声明,因为您没有描述您认为它的作用。至于“发生了什么事?”,这不是一个真正可以回答的问题。很多事情正在发生。你想知道什么?如果您正在寻求澄清(或者如果您有一个更精确的问题),列出预期输入/输出与实际输入/输出将是一个好的开始。 该函数在最后给出输入,应该返回值 1,因为只有一个有效的笑脸。我认为 continue 的作用是停止运行 for 块中的代码,并在列表中的下一个笑脸上运行它。 【参考方案1】:

你误会的是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 语句都已完成此操作,因此您需要修复这些问题。

【讨论】:

@lifelonglearner 请按答案旁边的复选标记接受对您有帮助的答案。它会告诉其他人(和系统)您的问题已得到解答。

以上是关于我误解了 continue 语句吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何用Pythoncontinue语句及单个for循环输出10~20之间的所有奇数及21~30间的?

Javascript-JS问题:continue语句

C++ Continue 语句混淆

我可以在 Javascript for...in 和 for...of 循环中使用 continue 和 break 吗?

有人可以解释 if 语句中的 continue 键吗? [复制]

循环语句,beark语句和continue语句,请举几个例子