我目前正在Jupyter Notebook的dataquest.io指导项目中进行练习。我的目标是编写一个函数,以检查给定字符串中的每个字符的ASCII码是否都超过127,并且如果字符串中的字符超过三个,则返回False。
Github link to entire code-位于单元格20中的有问题的功能
我尝试在Jupyter Notebook的内核中尝试“重新启动并全部运行”,该功能过去曾帮助调试,但这次没有。我还查看了此练习的解决方案,并且我的代码从字面上看是相同的。但是,我的代码返回的是非英语应用名称的True。
def is_english(string):
non_ascii = 0
for c in string:
char = ord(c)
if char > 127:
non_ascii += 1
if non_ascii > 3:
return False
else:
return True
print(is_english('爱奇艺PPS -《欢乐颂2》电视剧热播'))
print(is_english('Instachat ?'))
输出: 真正 是
预期结果为: 假 是
我认为较大的项目中的某些问题可能会引起问题,因为我的代码与solution code相匹配。我只是无法掌握正在发生的事情。谢谢初学者!
答案 0 :(得分:2)
问题出在您的if / else上:两条路径都返回,因此您总是在检查第一个字符后才返回。
您可以通过在for循环之外返回True来解决此问题,因此循环会在返回True之前遍历每个字符:
def is_english(string):
non_ascii = 0
for c in string:
char = ord(c)
if char > 127:
non_ascii += 1
if non_ascii > 3:
return False
return True
print(is_english('爱奇艺PPS -《欢乐颂2》电视剧热播'))
print(is_english('Instachat ?'))
链接的解决方案是正确的,除了缩进以外,其他都与您的匹配!如果您查看解决方案缩进,则可以看到它们在循环结束之后是否完成。