【发布时间】: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