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

时间:2017-10-15 06:50:12

标签: python loops break

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

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

如果在恢复的前四行内没有跳过单词的IF行,则将其视为人名

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

这里我尝试编写逻辑,但它没有正确工作。如果第一行作为简历,即使它将名称作为简历。

如何跳过任何有skip_list中任何单词的开头行,并打印正确的名称。

我很感激你的帮助。

1 个答案:

答案 0 :(得分:0)

您的代码没有按预期方式工作的主要原因是,只要任何一个skip_words不在一行文本中,函数就会返回。

你需要基本原则的帮助而不是这个问题的答案。尝试将代码粘贴到pythontutor.com并逐行观察执行。

  • 您的代码没有使用(也不需要)面向对象的方法。当函数selfdef中定义的方法时,将使用class参数。事实上,你从不在函数定义中使用self,这表明你可以在类定义之外编写常规函数定义。删除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 ''