我目前正在Jupyter Notebook的dataquest.io上做一个指导性项目的练习。我的目标是编写一个函数,检查给定字符串中的每个字符的ASCII数是否都超过127,如果字符串中的ASCII数超过三个,则返回False。
Github link to entire code -位于单元20中的有问题的函数
我已经尝试在我的Jupyter Notebook的内核中重新启动并运行所有的东西,这在过去有助于调试,但这次不是。我还查看了这个练习的解决方案,我的代码完全相同。然而,对于一个明显非英语的应用程序名称,我的代码返回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 ?'))输出: True True
预期结果为: False True
我推测也许更大的项目中的某些东西是一个问题,因为我的代码与solution code匹配。我就是搞不懂到底发生了什么。来自初学者的感谢!
发布于 2019-06-24 07:50:15
问题出在if/else:两个路径都返回,所以总是在检查第一个字符之后返回。
您可以通过在for循环外部返回True来修复此问题,以便在返回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是在循环结束后完成的。
https://stackoverflow.com/questions/56728464
复制相似问题