为什么我的函数检查英语应用程序会为非英语应用程序返回 True?

Why is my function checking for English apps returning True for non-English apps?

我目前正在 Jupyter Notebook 的 dataquest.io 指导项目中做练习。我的目

Github link to entire code - 单元格 20 中存在问题的函数

我已经在我的 Jupyter Notebook 的内核中尝试了 Restart 和 运行 所有这一切在过去帮助调试但这次没有。我还查看了此练习的解决方案,我的代码完全相同。然而,我的代码 returning 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 匹配。我只是无法了解正在发生的事情。感谢初学者!

问题出在您的 if/else:两条路径 return,因此您总是 return 检查完第一个字符后就开始了。

您可以通过在 for 循环外 returning True 来解决这个问题,因此循环遍历 returning 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 '))

链接的解决方案是正确的,除缩进外与您的解决方案完全匹配!如果您查看解决方案缩进,您可以看到它们的 if/else 是在循环结束后完成的。