我正在尝试测试列表中的笑脸。这是练习:
** 给定一个数组(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']))
答案 0 :(得分: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
语句,因此需要修复这些语句。