请回顾一下为什么这两段代码会产生不同的结果。如果输入字符串包含任何非英语字符,则目标是返回True或False。
代码1:
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:
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
我不明白为什么第一段代码会产生不正确的结果。
发布于 2019-07-28 12:59:03
在代码1中,如果找到英文字符,则返回True;在代码2中,如果找到非英语字符,则返回False。只有当所有字符都是英语时,才会返回True。
需要注意的关键点是,一旦遇到return,您就可以使用与return一起传递的值退出函数。
您可以通过在生成器上使用string模块和all来实现这一点:
def is_english(s):
return all(char.lower() in string.ascii_lowercase for char in s)如果所有字符都是英文字符,则返回True,否则返回False。
发布于 2019-07-28 12:59:15
在第一个函数中,使用for char in string遍历所有字符,但由于if语句的两种情况都有显式返回,因此不会检查第一个字符之后的任何字符。
这就是为什么它返回False, True, True,因为第一个字符是爱,D,I。
发布于 2019-07-28 13:01:13
当您在一个函数中时,return关键字的意思是“停止您正在做的任何事情,获取该值,并将其返回给请求它的任何人”。因此,您的第一个函数开始遍历字符串中的每个字符。
它从第一个字符开始,并检查其Unicode表示形式是否在0到127之间。如果是,则向 result1返回True。就这样。函数现在已经完成,Python继续执行下一行代码,即检查result2。
如果它不在0和127之间,那么同样的情况也会发生,代码返回False,然后停止。
无论哪种方式,一旦命中return语句,您的函数就结束了。因为您的第一个字符串以非英语字符开头,所以它返回false。因为第二个字符串是以英文字符开头的,所以它们返回true。
https://stackoverflow.com/questions/57238049
复制相似问题