Python中有没有一种方法可以在输入字符串中搜索一个短语,然后返回一个1(如果有),或者0(如果没有)?你知道吗
我希望它像这样工作:
def findphrase(var):
if re.compile(r'\b({0})\b'.format(var), flags=re.IGNORECASE).search is True:
return 1
else:
return 0
def howareyou():
print("So",name, "how are you today?")
howis = input("")
if findphrase('not well')(howis) is 1:
print("Oh, that's not good. I hope you feel better soon")
elif findphrase('well')(howis) is 1:
print("That's good.")
elif findphrase('not bad')(howis) is 1:
print("Better than bad, I suppose.")
elif findphrase('bad')(howis) is 1:
print("Oh, that's not good. I hope you feel better soon")
elif findphrase('not good')(howis) is 1:
print("That's a shame. I hope you feel better soon.")
elif findphrase('good')(howis) is 1:
print("That's good.")
else:
print("I dont know how to respond to that. Keep in mind I am a work in progress. At some point I may know how to respond.")
您当前的实现有bug,无法工作。你知道吗
.search
是一个函数,它是一个对象。既然它是一个对象,它就永远不等于真。因此,您将始终返回0。你知道吗findphrase
返回函数NameError
。所以用raw_input
代替。你知道吗in
操作符来反对在这里使用正则表达式if findphrase('good')(howis) is 1:
是一个身份测试,因为您只返回0
/1
,所以可以直接使用if findphrase('good')(howis):
检查值您可以在这里使用一个简单的lambda函数:
把它叫做:
如果你想返回一个函数, 那你可以用
正则表达式在这方面可能有点过头了。我会用
in
。你知道吗例1:
考虑到返回
1
或0
的要求,我实现findphrase()
的方法是:注意使用
to_find.lower()
和phrase.lower()
来确保资本化并不重要。你知道吗例2:
但坦白说,我不知道你为什么要返回1或0。我只需要返回一个布尔值,这将使:
如果您确实需要将结果用作
1
或0
(如果您重写howareyou()
函数,则不会这样做),则True
和False
分别转换为1
和0
:附加说明
在
howareyou()
函数中,有许多错误。您将findphrase()
称为findphrase('not well')(howis)
。只有从findphrase()
(闭包)返回函数时,这才有效,如下所示:这是因为函数只是Python中的另一种类型的对象。它可以像任何其他对象一样返回。如果您按照以下思路进行操作,则可能需要使用这样的构造:
这是因为将
findphrase('not well')
的结果赋给变量not_well
。这将返回一个函数,然后可以将其作为not_well(phrase)
调用。执行此操作时,它会将提供给not_well()
的变量phrase
与提供给findphrase()
的变量var
进行比较,该变量作为not_well()
命名空间的一部分存储。你知道吗但在本例中,您可能真正想做的是用两个参数定义
findphrase()
函数,就像前两个示例中的一个。你知道吗你也在使用
findphrase(...) is 1
。你可能想要的是findphrase(...) == 1
或者,更像Python的,if findphrase(...):
。你知道吗相关问题 更多 >
编程相关推荐