【问题标题】:Do I misunderstand the continue statement?我误解了 continue 语句吗?
【发布时间】: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 块中的代码,并在列表中的下一个笑脸上运行它。

标签: python-3.x for-loop continue


【解决方案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 请按答案旁边的复选标记接受对您有帮助的答案。它会告诉其他人(和系统)您的问题已得到解答。
猜你喜欢
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 2011-11-03
相关资源
最近更新 更多