首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的函数检查英语应用程序对于非英语应用程序返回True?

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

Stack Overflow用户
提问于 2019-06-24 07:42:33
回答 1查看 3.5K关注 0票数 1

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

Github link to entire code -位于单元20中的有问题的函数

我已经尝试在我的Jupyter Notebook的内核中重新启动并运行所有的东西,这在过去有助于调试,但这次不是。我还查看了这个练习的解决方案,我的代码完全相同。然而,对于一个明显非英语的应用程序名称,我的代码返回True。

代码语言:javascript
复制
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 ?'))

输出: True True

预期结果为: False True

我推测也许更大的项目中的某些东西是一个问题,因为我的代码与solution code匹配。我就是搞不懂到底发生了什么。来自初学者的感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-24 07:50:15

问题出在if/else:两个路径都返回,所以总是在检查第一个字符之后返回。

您可以通过在for循环外部返回True来修复此问题,以便在返回True之前循环遍历每个字符:

代码语言:javascript
复制
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是在循环结束后完成的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56728464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档