谁能帮我弄清楚为什么‘Instachat:stuck_out_tongue_winking_eye:’和‘Docs To Go™Free Office Suite’的代码没有返回False?它们包含unicodes大于127的字符(分别为emoji和TM ),因此从技术上讲,这两个字符都应该返回False。
我不明白为什么else子句在这里不起作用。
# My Code (logic doesn't seem to work)
def is_english(string):
for character in string:
if ord(character) > 127:
return False
else:
return True
print(is_english(‘Instagram’))
print(is_english(‘爱奇艺PPS -《欢乐颂2》电视剧热播’))
print(is_english(‘Docs To Go™ Free Office Suite’))
print(is_english(‘Instachat :stuck_out_tongue_winking_eye:’))
#Solution Code (works but I don't understand why)
def is_english(string):
for character in string:
if ord(character) > 127:
return False
return True下面是我的代码的预期输出: True False
但是,实际输出是: True False True True
发布于 2019-09-03 00:26:33
因为您需要更改字母代码范围(例如,如next):
def is_english(s):
for c in s.lower():
if ord('a') > ord(c) or ord(c) > ord('z'):
return False
return True发布于 2019-09-03 00:38:10
以下函数:
def is_english(string):
for character in string:
if ord(character) > 127:
return False
else:
return True没有按预期工作,因为您只根据string中的第一个character返回结果( True或False)。您必须将return True语句移到for循环之外,就像您提供的第二种方法一样:
def is_english(string):
for character in string:
if ord(character) > 127:
return False
return True这样,您可以根据给定的条件检查每个character,直到发现其中一个character不是英语的,或者直到检查完所有character为止。如果两者都不是英语,则可以返回True。
发布于 2019-09-03 00:38:18
如果我理解你的问题,你必须这样试一试:
# The Code
def is_english(string):
for character in string:
if ord(character) > 127:
return False #if character is major than 127
else:
return True #if character is minor than 127
print(is_english('Instagram'))
print(is_english('爱奇艺PPS -《欢乐颂2》电视剧热播'))
print(is_english('Docs To Go™ Free Office Suite'))
print(is_english('Instachat :stuck_out_tongue_winking_eye:'))输出为: True False True True
缩进不正确,那么您的代码将无法工作。
我希望这能帮到你。
https://stackoverflow.com/questions/57760109
复制相似问题