当前位置: 首页 > 知识库问答 >
问题:

For循环中的if语句-逻辑错误

徐丰茂
2023-03-14

有人能帮我找出为什么Instachat:Stick\u out\u舌头\u winking\u eye:'和'Docs To Go'的代码没有返回False吗™ 免费办公套房'?它们包含Unicode大于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

共有3个答案

冀耀
2023-03-14

如果我理解你的问题,你必须这样做:

# 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

缩进是不正确的,然后你的代码不工作。

我希望这能有所帮助。

华阳秋
2023-03-14

以下功能:

def is_english(string):
    for character in string:
        if ord(character) > 127:
            return False
        else:
            return True

由于仅基于字符串中的第一个字符返回结果(无论是True还是False),因此无法按预期工作。您必须将return True语句移到for循环之外,就像您提供的第二种方法一样:

def is_english(string):
    for character in string:
        if ord(character) > 127:
            return False
    return True

通过这种方式,您可以根据给定条件检查每个字符,直到发现其中一个字符s为非英语字符,或者直到检查完所有字符s为止。如果两者都不是非英语,则可以返回True

洪季萌
2023-03-14

因为您需要更改字母代码范围(例如,像下一个):

def is_english(s):
    for c in s.lower():
        if ord('a') > ord(c) or ord(c) > ord('z'):
            return False

    return True
 类似资料:
  • 问题内容: 目前无法打破此循环。如果要在此列表中找不到变量,我想破坏它,以便它可以移动另外两个循环。它期望在循环的顶部有一个缩进的块,但是如果更改循环的开头或开头的位置,它将无法正常工作。救命! 问题答案: 正如人们在对您的问题的评论中提到的那样,您需要分别打破每个循环,仅停止其所在的循环 两个 循环都需要这样做 如果您也想打破while循环,那么您也可以添加该循环。

  • 标准循环 为了保持简洁,重复的任务可以用以下简写的方式: - name: add several users user: name={{ item }} state=present groups=wheel with_items: - testuser1 - testuser2 如果你在变量文件中或者 ‘vars’ 区域定义了一组YAML列表,你也可以这样做: vars

  • 我有一个380行20列的表格。我想从该表中删除符合特定条件的行。 为了澄清问题,假设我有以下列表: 我想删除在列表中找到姓名的所有人员的数据。 例如,假设我的数据如下所示: 我想删除、和的数据。所以输出应该是: 我的代码正在运行,但数据没有从我的原始数据中删除。当我打开新的测试.txt文件时,我可以看到数据没有被删除。 我可以肯定错误在< code > if data[row][0]= =(I f

  • 这是一些我更愿意自己解决的工作,所以如果可能的话,请不要直接给出答案,但也许可以给我指明正确的方向,为什么我会从循环输出中收到错误,为什么if语句不会产生输出。 你知道是什么导致了这一切吗?

  • 问题内容: 现在,父级for循环()在第一个findOne触发之前完成,因此,这仅循环通过repliesIDsArray..asynchronous。的最后一个元素。 此代码集的承诺版本的正确语法是什么?Promisification的新手,想知道如何开始Promisify +遍历数组+解释if语句。 蓝鸟是必需的,并且被调用。 问题答案: 正如本杰明所说,不要使用循环,而应使用(或) 在此处查看

  • 因此,我当前遇到的问题是,在我完成所有步骤后,“Enter your command(reverse,replace first,replace last,remove all,remove)”语句被打印了两次。 我相信正在发生的是循环执行了两次,但我不知道为什么。如果能帮助解决这个问题,我们将不胜感激。抱歉,如果我的代码格式不好,还在学习如何正确的格式。