检查嵌套循环中的字符串是否存在
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 并逐行观察执行。
您的代码没有使用(也不需要)面向对象的方法。当您的函数 def
是 class
中定义的方法时,将使用 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 ''
我正在编写试图从 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 并逐行观察执行。
您的代码没有使用(也不需要)面向对象的方法。当您的函数
def
是class
中定义的方法时,将使用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 ''