(我是Python和编程的新手)我正在使用raw_input()
所以我可以创建一个与用户对话的程序。例如:
计划:你好吗? 网友:我做得很好!/我觉得很糟糕。
我需要我的程序做出相应的回应,就像“YAY!”或者“哇男人......我希望你能早日感觉好些。”所以,请你给我一些方法来扫描用户的原始输入中的“好”或“坏”等词,以便我的程序知道如何回应?
我知道有几种方法可以做到这一点,但问题是,我想要多个字来寻找它,就像伟大的,令人惊叹的,并且真棒都可以被归类为“好”组。而且,我需要它不必确切的地方。我一直在遇到用户必须输入的问题,“我很好。”而不是他们可能会说出的所有不同的变化。谢谢你提前!
答案 0 :(得分:2)
您可能会发现set
在这里很有用。
sentence = "I feel great"
words = sentence.split(" ")
if set("good", "fine", "great").intersects(words):
print("user is good!")
if set("bad", "poorly", "sick").intersects(words):
print("user is bad")
set
是一种特殊类型的容器,如list
或dict
。它忽略了重复的条目,但在检查项目是否已存在方面非常快。 set.intersects
会返回一个新的set
,其中只包含双方找到的项目:因此,在上面的第一个if
语句中,它会返回set("great")
,这是" truthy& #34; (在布尔上下文中表现得像True
)。第二个if语句得到一个空集,即" falsey"
您可以使用字典清理它(但您必须稍作修改我将在下面解释)
responses = {frozenset("good", "fine", "great"): "that's fantastic",
frozenset("bad", "poorly", "sick"): "I hope you feel better!"}
words = sentence.split(" ")
for wordset, reply in responses:
if(wordset.intersects(words):
print(reply)
我们必须使用frozenset
而不是set
进行更改。您需要担心的唯一真正区别是,frozenset
不可变,这意味着您无法添加或删除其中的成员。出于与实施相关的原因,dict
键应该是不可变的:您不能使用dict
,list
或set
作为key:但您可以使用tuple
,int
,str
等
如果不使用set
,您可以获得完全相同的行为:它只需要几行:
responses = {("good", "fine", "great"): "that's fantastic",
("bad", "poorly", "sick"): "I hope you feel better!"}
words = sentence.split(" ")
for wordtuple, reply in responses:
for word in words:
if word in wordtuple:
print(reply)
break
因此,我们还需要两条线,并且最终会比我们实际需要做更多的检查。如果要检查很多可能的单词,那么可以减慢您的程序速度。以这种方式做到这一点并不总是坏事,例如,你可能会得到responses
,这意味着你无法控制这些类型,但如果你知道你的话。写下你自己的所有代码,从一开始就以诡异的方式做事。
答案 1 :(得分:0)
嗯,我不确定程序是否理解英语。它只会将字符串文字作为字符串文字。 "良好的"对Python中的Interpreter来说并不意味着好或坏。
我所建议的是制作一本你想要的所有好词的词典,例如我很好,喜欢'很好,我很好。你可以将所有这些良好感觉的字符串文字存储到你的好感觉#34;字典,反之亦然,你的Bad感觉字符串文字。
我不太确定你是如何以高于100%的准确度来解决拼写问题并且翻译仍然在捡起它
我自己也没有经验,但我说预定义词典是你最好的选择,也许会抛出一个else语句,如果他不能得到其中一个,就会提示用户正确拼写说得对。