为什么我的函数检查英语应用程序会为非英语应用程序返回 True?
Why is my function checking for English apps returning True for non-English apps?
我目前正在 Jupyter Notebook 的 dataquest.io 指导项目中做练习。我的目
Github link to entire code - 单元格 20 中存在问题的函数
我已经在我的 Jupyter Notebook 的内核中尝试了 Restart 和 运行 所有这一切在过去帮助调试但这次没有。我还查看了此练习的解决方案,我的代码完全相同。然而,我的代码 returning True 对于一个明显的非英语应用程序名称。
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 '))
输出:
真的
真
预期结果是:
错误的
真
我推测可能是较大项目中的某个问题,因为我的代码与 solution code 匹配。我只是无法了解正在发生的事情。感谢初学者!
问题出在您的 if/else:两条路径 return,因此您总是 return 检查完第一个字符后就开始了。
您可以通过在 for 循环外 returning True 来解决这个问题,因此循环遍历 returning True 之前的每个字符:
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 是在循环结束后完成的。
我目前正在 Jupyter Notebook 的 dataquest.io 指导项目中做练习。我的目
Github link to entire code - 单元格 20 中存在问题的函数
我已经在我的 Jupyter Notebook 的内核中尝试了 Restart 和 运行 所有这一切在过去帮助调试但这次没有。我还查看了此练习的解决方案,我的代码完全相同。然而,我的代码 returning True 对于一个明显的非英语应用程序名称。
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 '))
输出: 真的 真
预期结果是: 错误的 真
我推测可能是较大项目中的某个问题,因为我的代码与 solution code 匹配。我只是无法了解正在发生的事情。感谢初学者!
问题出在您的 if/else:两条路径 return,因此您总是 return 检查完第一个字符后就开始了。
您可以通过在 for 循环外 returning True 来解决这个问题,因此循环遍历 returning True 之前的每个字符:
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 是在循环结束后完成的。