请查看为什么这两段代码会产生不同的结果。目标是如果输入字符串包含任何非英语字符,则返回 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
我不明白为什么第一段代码会产生不正确的结果。
最佳答案
在代码 1 中,如果找到英文字符,则返回 True
,否则返回 False
,但在代码 2 中,如果找到英文字符,则返回 False
你发现一个非英文字符。只有当所有字符都是英文时,这才会返回 True
。
要注意的关键点是,一旦遇到 return
,您就会退出函数,并使用与 return
一起传递的值。
您可以使用 string
模块和生成器上的 all
以更 python 的方式执行此操作:
def is_english(s):
return all(char.lower() in string.ascii_lowercase for char in s)
如果所有字符都是英文字符,则返回 True
,否则返回 False
。
关于python - 字符串是否有英文字符——一段Python代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57238049/