首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串是否包含英语字符- Python中的代码

字符串是否包含英语字符- Python中的代码
EN

Stack Overflow用户
提问于 2019-07-28 12:50:32
回答 5查看 52关注 0票数 2

请回顾一下为什么这两段代码会产生不同的结果。如果输入字符串包含任何非英语字符,则目标是返回True或False。

代码1:

代码语言:javascript
复制
def char_find(string):
    for char in string:
        if (ord(char) >= 0) and ord(char) <= 127:
            return True
        else:
            return False

result1 = char_find('爱奇艺PPS -《欢乐颂2》电视剧热播')
result2 = char_find('Docs To Go™ Free Office Suite')
result3 = char_find('Instachat ')
print(result1, result2, result3)

这将生成结果False、True、True

代码2:

代码语言:javascript
复制
def is_english(string):
    for char in string:
        if ord(char) > 127:
            return False
    return True

resultX = is_english('爱奇艺PPS -《欢乐颂2》电视剧热播')
resultY = is_english('Docs To Go™ Free Office Suite')
resultZ = is_english('Instachat ')
print(resultX, resultY, resultZ)

这会产生结果False,False,False

我不明白为什么第一段代码会产生不正确的结果。

EN

回答 5

Stack Overflow用户

发布于 2019-07-28 12:59:03

在代码1中,如果找到英文字符,则返回True;在代码2中,如果找到非英语字符,则返回False。只有当所有字符都是英语时,才会返回True

需要注意的关键点是,一旦遇到return,您就可以使用与return一起传递的值退出函数。

您可以通过在生成器上使用string模块和all来实现这一点:

代码语言:javascript
复制
def is_english(s):
    return all(char.lower() in string.ascii_lowercase for char in s)

如果所有字符都是英文字符,则返回True,否则返回False

票数 1
EN

Stack Overflow用户

发布于 2019-07-28 12:59:15

在第一个函数中,使用for char in string遍历所有字符,但由于if语句的两种情况都有显式返回,因此不会检查第一个字符之后的任何字符。

这就是为什么它返回False, True, True,因为第一个字符是爱,D,I。

票数 0
EN

Stack Overflow用户

发布于 2019-07-28 13:01:13

当您在一个函数中时,return关键字的意思是“停止您正在做的任何事情,获取该值,并将其返回给请求它的任何人”。因此,您的第一个函数开始遍历字符串中的每个字符。

它从第一个字符开始,并检查其Unicode表示形式是否在0到127之间。如果是,则 result1返回True。就这样。函数现在已经完成,Python继续执行下一行代码,即检查result2

如果它不在0和127之间,那么同样的情况也会发生,代码返回False,然后停止。

无论哪种方式,一旦命中return语句,您的函数就结束了。因为您的第一个字符串以非英语字符开头,所以它返回false。因为第二个字符串是以英文字符开头的,所以它们返回true。

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

https://stackoverflow.com/questions/57238049

复制
相关文章

相似问题

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