Python:如果Raw_Input包含...... BLAH

时间:2016-04-28 19:54:46

标签: python raw-input

(我是Python和编程的新手)我正在使用raw_input()所以我可以创建一个与用户对话的程序。例如:

计划:你好吗? 网友:我做得很好!/我觉得很糟糕。

我需要我的程序做出相应的回应,就像“YAY!”或者“哇男人......我希望你能早日感觉好些。”所以,请你给我一些方法来扫描用户的原始输入中的“好”或“坏”等词,以便我的程序知道如何回应?

我知道有几种方法可以做到这一点,但问题是,我想要多个字来寻找它,就像伟大的,令人惊叹的,并且真棒都可以被归类为“好”组。而且,我需要它不必确切的地方。我一直在遇到用户必须输入的问题,“我很好。”而不是他们可能会说出的所有不同的变化。谢谢你提前!

2 个答案:

答案 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是一种特殊类型的容器,如listdict。它忽略了重复的条目,但在检查项目是否已存在方面非常快。 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应该是不可变的:您不能使用dictlistset作为key:但您可以使用tupleintstr

如果不使用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语句,如果他不能得到其中一个,就会提示用户正确拼写说得对。