python - 为什么我的函数检查英语应用程序对非英语应用程序返回 True?
问题描述
我目前正在 Jupyter Notebook 中关于 dataquest.io 的指导项目中进行练习。我的目标是编写一个函数来检查给定字符串中的每个字符是否都有超过 127 的 ASCII 数字,如果字符串中的字符超过三个,则返回 False。
Github 链接到整个代码- 位于 Cell 20 中的有问题的函数
我在 Jupyter Notebook 的内核中尝试过 Restart and Run All ,这在过去帮助调试,但这次没有。我还查看了此练习的解决方案,我的代码实际上是相同的。然而,对于一个明显非英文的应用程序名称,我的代码返回 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 '))
输出:真真
预期结果是:假真
我推测可能较大项目中的某些问题是一个问题,因为我的代码与解决方案代码匹配。我只是无法掌握正在发生的事情。来自初学者的感谢!
解决方案
问题在于您的 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 在循环完成后完成。
推荐阅读
- python - Python:time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime()) 为程序的整个执行提供相同的时间。我想实时显示
- angular - 如何创建一个订阅,当您取消单击鼠标按钮以进行角度拖放功能时进行监听
- aws-lambda - 跨账户 AWS Cognito 授权方问题
- laravel - 如何使用元素 ui、vue js 和 laravel 将图像上传到文件夹
- pyspark - difflib.get_close_matches 的 pyspark 实现
- c# - 如何检测 Xbox One 游戏手柄指南按钮何时被按下(中间的大 X)?
- python-3.x - 循环完成后 Python 更改路径
- javascript - 如何在反应js的输入字段中插入图像?
- reactjs - React Router Link 不在自定义历史记录中保留状态
- python - 用 Python 在 Plotly 中分组图例