我是否误解了继续声明?



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

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

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

最新更新