首页 > 解决方案 > 为什么我的函数检查英语应用程序对非英语应用程序返回 True?

问题描述

我目前正在 Jupyter Notebook 中关于 dataquest.io 的指导项目中进行练习。我的目标是编写一个函数来检查给定字符串中的每个字符是否都有超过 127 的 ASCII 数字,如果字符串中的字符超过三个,则返回 False。

Github 链接到整个代码- 位于 Cell 20 中的有问题的函数

我在 Jupyter Notebook 的内核中尝试过 Restart and Run All ,这在过去帮助调试,但这次没有。我还查看了此练习的解决方案,我的代码实际上是相同的。然而,对于一个明显非英文的应用程序名称,我的代码返回 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 '))

输出:真真

预期结果是:假真

我推测可能较大项目中的某些问题是一个问题,因为我的代码与解决方案代码匹配。我只是无法掌握正在发生的事情。来自初学者的感谢!

标签: pythonjupyter-notebookkaggle

解决方案


问题在于您的 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 '))

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


推荐阅读