为什么它返回一个空列表?
def count_smileys(arr):
stack = []
for i in range(len(arr)):
for j in range(i):
if arr[i][j] == ":" or arr[i][j] == ";":
stack.append(arr[i][j])
elif arr[i][j] == "~" or arr[i][j] == "-":
if stack == 0:
return False
else:
stack.append(arr[i][j])
elif arr[i][j] == "D" or arr[i][j] == ")":
if stack == 0:
return False
else:
stack.append(arr[i][j])
return stack
print(count_smileys([':D',':~)',';~D',':)'])) #, 4
print(count_smileys([':)',':(',':D',':O',':;'])) #, 2
print(count_smileys([';]', ':[', ';*', ':$', ';-D'])) #, 1
第一个错误在这里:
应该
两者中的第二
因为 它将永远是
False,因为您在开始时将其定义stack为列表。也许你想要
第三个错误:
因为 这就是一切结束的地方 - 函数将返回
False并且不会有进一步的循环。我只写了 3 个错误,但这还不是全部。在我看来,有必要以不同的方式再次做所有事情。
您可能想计算给定字符串列表中表情符号的数量。
此外,你的笑脸意味着:
:或;-or~,但可以省略,D是)你想数表情符号 - 从头开始:
从列表中选择下一行:
确定其中的字符数:
当它不适合时,删除这一行 - 继续循环,选择下一行:
当命令
continue失败时,我们知道我们的字符串由 2 或 3 个字符组成。当它们中的第一个不存在时:,;我们再次抛出该行:与最后一个字符相同:
但是现在这一切都取决于字符的数量 - 当一行只有 2 个时,这是一个笑脸,我们将挂起笑脸的数量并继续下一行:
当这没有发生时,我们知道字符数是 3,第一个和最后一个是合适的,这意味着一切都取决于平均值(第二个,即带有 index
1):当我们还没有掉线时,它很合适——它是一张笑脸——然后数一下:
测试字符串后 - 退出循环 - 变量
counter已经包含所有表情符号的数量,我们将返回它:一切。
整体功能:
使用您的列表进行测试:
将发出
您的任务与应用正则表达式一样:
在正则表达式中
[:;]表示第一个字符必须是冒号或分号,[-~]?表示下一个字符必须是-or~,或者可以跳过 (?)[D)]意味着D或)$表示行的结束。pattern.match(strn)将用这个正则表达式匹配字符串的开头。strn决定了,看看你的常规赛:D