我是编程新手,刚刚通过工作中的在线课程开始学习Python。我目前正在讨论编写一个函数的主题。我认为拥有一个可以让我在提供的任何文本字符串中搜索单词的函数将会很有用。
def searchword(enterprise, customer):
if "enterprise" exist:
result = True
else:
result = False
我不知道如何编写搜索“企业”和“客户”这两个词的函数。我不知道如何定义它,它会在句子字符串中查找单词。
我的工作导师给了我以下功能来验证我的上述功能是否有效,但我无法让它工作。
def check_searchword():
assert searchword(True, True), "StarFox is an enterprise client."
print('Correct')
import re
def searchword(customerString, searchFor="enterprise"):
if re.search(searchFor, customerString):
return True
else:
return False
assert searchword("StarFox is an enterprsise client."), True
assert searchword("StarFox is an enxerprsexe client."), True >> Throws AssertionError: True
很棒的起始项目 - 有几点需要注意。首先,Python 不使用缩进,这就是你的导师功能不起作用的原因之一。
另一种方法是使用 for 循环,它将迭代列表中的每个项目并进行检查。例如:
test ="StarFox is an enterprise client."
searchword = ['enterprise', 'customer']
for i in searchword:
print(i in test) #please note, this will look for the grouping of letters and not a direct work match. So the loop will see 'enterprise' and 'enterprises' as the same thing
最后,这种类型的文本检查最好使用正则表达式来完成。网上有大量关于这方面的教程 - 《Automate the Boring Stuff》一书是一个很好的资源,许多博客文章也是如此,例如这篇来自 Towards Data Science
学习如何编程就是学习将问题分解为可以进一步分解的步骤,等等,直到达到存在单个命令或语句的步骤。并且让每一步都变得非常具体 - 成为你自己的魔鬼代言人。
如果您正在为工作进行编程,诀窍是了解许多维护良好的库,这些库允许您在单个语句中编写更复杂的步骤,而不必自己编写所有内容,但作为初学者,可以编写它你自己可以有启发性。
如果您正在学习使用函数,要学习的关键是,如果函数更通用,那么它会更有用,但又不能太通用,以至于对于简单的用途来说,它会变得不必要的复杂。
您提出了一个在提供的字符串中搜索单词的函数。您给出的示例似乎适用于两个特定单词(并且仅适用于这两个单词)。更通用的函数是在提供的字符串中搜索任意数量的单词。
如果您分解在字符串中查找多个单词的问题,最明显的步骤是您需要在字符串中查找单个单词并为每个单词执行该任务。如果全部找到,结果应该是
True
,否则应该是False
。
Python 中的事情就这么简单:
>>> 'test' in 'this was a test'
True
尽管这可能表明您需要其他东西:
>>> 'is' in 'this was a test'
True
is
是 this
的一部分,所以这可能不是你想要的。具体一点 - 您只想匹配整个单词还是单词的一部分?如果您只想要整个单词,那么您现在有一个新任务:将字符串分解为整个单词。
类似这样的:
>>> 'is' in 'this was a test'.split()
False
>>> 'test' in 'this was a test'.split()
True
如果您需要一次又一次地对多个事情执行此操作,循环听起来很明显:
>>> text = 'this was a test'
>>> result = True
>>> for word in ['test', 'was']:
... result = result and word in text.split()
如果您的任务是在函数中捕获它,则该函数应该通过其参数(字符串和要查找的单词)接收完成其工作所需的所有内容,并且它应该返回您期望从中得到的所有内容(单个布尔值)值)。
def search_words(text, words):
result = True
for word in words:
result = result and word in text.split()
return result
print(search_words('this was a test', ['was', 'test']))
这可行,但效率不是很高,因为它一次又一次地分割文本,每个单词一次。此外,对于训练有素的 Python 眼睛来说,它看起来不太“Pythonic”,这通常意味着用清晰易读的 Python 编写它,建立在 Python 作为一种语言的优势之上。
例如:
def search_words(text, words):
text_words = text.split()
return all(word in text_words for word in words)
print(search_words('this was a test', ['was', 'test']))
当然,编程的另一个重要方面是满足客户的规格。如果他们坚持想要一个仅使用文本作为参数来搜索这两个特定单词的函数,您可以使用上面的函数快速为他们提供:
def client_search_words(text):
return search_words(text, ['enterprise', 'customer'])
assert client_search_words('StarFox is an enterprsise client'), True
这将引发断言错误,因为它断言了
False
的内容(该函数的结果不是 True
)。
我不认为在这里使用断言是一个很好的方法,这是 Python 的一部分,通常远不如你现在想要处理的东西重要。
要将字符串拆分为所有单词的列表,我将使用
string1.split()
在 python
string1 in list1
中,如果 string1 存在于 list1 中,则返回 True,否则返回 False。
# This function is used to search a word in a string.
# it returns True if search_key is present in search_string.
# else False.
def searchword(search_key, search_string):
search_list = search_string.split()
return search_key in search_list
search_s = "StarFox is an enterprise client."
print( searchword("enterprise", search_s) )
就这样做:
key_words = ["enterprise", "customer"]
userInput = input("How may I help you?")
for word in userInput.split()
if word in key_words:
return true
else:
return false
这样的东西可能会有帮助。如果不是或者有什么问题,请告诉我,因为我也是初学者! 😀