检查嵌套循环中的字符串是否存在

checking string presence in nested loop

我正在编写试图从 Resume 中提取用户名的函数。

大多数时候第一行包含用户名,但有时我的学生也会在第一行写简历、简历标题。所以我想忽略这一行并检查下一行。

如果在简历的前四行中出现没有跳过单词的行,则将其视为人名

def name_extractor(self, text):
    skip_words = ['CURRICULUM', 'VITAE', 'resume']
    text_lines = text.split('\n')
    name = ''
    # pdb.set_trace()        
    for  i in range(0,4):
        if text_lines[i]:
            for word in skip_words:
                if word.lower() in text_lines[i]:
                    break
                else:
                    name = text.split('\n')[i]
                    # print name
                    return name         
    return name

我在这里尝试编写逻辑,但它无法正常工作。如果第一行是resume,即使它给出了resume的名称。

如何跳过包含 skip_list 中任何单词的任何开始行并打印正确的名称。

感谢任何帮助。

您的代码未按您预期的方式工作的主要原因是,只要 skip_words 中的任何一个不在一行文本中,函数 returns 就会立即生效。

您需要基础知识方面的帮助,而不是此问题的答案。尝试将您的代码粘贴到 pythontutor.com 并逐行观察执行。

  • 您的代码没有使用(也不需要)面向对象的方法。当您的函数 defclass 中定义的方法时,将使用 self 参数。您从不在函数定义中使用 self 的事实表明您可以在 class 定义之外编写常规函数定义。删除 self 参数。

  • 您不是在比较小写字母。您的代码将硬编码列表的项目转换为小写,但文本参数保持原样。在 skip_words 常量中使用小写字母并在传递给函数的文本上调用 lower 而不是在常量上调用 lower

  • Python 如果您遍历列表元素本身,代码通常更具可读性。使用变量来表示每个元素而不是计数器来访问列表元素。这也将消除用于检查前四行是否存在的 if 语句的需要。

  • 通常最好在一个函数中只使用一个 return 语句。

  • break 将退出 for 循环,我认为您打算 continue 跳过 for 循环的其余部分并前进到下一次迭代.

    def name_extractor(text):
        skip_words = ['curriculum', 'vitae', 'resume']
        text_lines = text.split('\n')
        for line in text_lines[:4]:
            line_words = set(line.lower().split(' '))
            if not line_words.intersection(skip_words):
                return line
        return ''