为什么我的英语应用程序功能检查对于非英语应用程序返回True?

时间:2019-06-23 23:42:33

标签: python jupyter-notebook kaggle

我目前正在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相匹配。我只是无法掌握正在发生的事情。谢谢初学者!

1 个答案:

答案 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 ?'))

链接的解决方案是正确的,除了缩进以外,其他都与您的匹配!如果您查看解决方案缩进,则可以看到它们在循环结束之后是否完成。