大多数面向对象的方式来创建和读取多个选项的列表?

时间:2017-03-05 15:15:24

标签: python oop

所以标题听起来有点令人困惑,但我会尝试彻底解释。我目前正在使用Python编写一个bot,它旨在根据提供给它的关键字对puns做出适当的响应。每个单词都有多个潜在的响应,但同样,每个单词都可以用于多个单词。

例如,如果找到cat_input中的单词(见下文),它将从cat_output生成随机响应。

cat_input= ['cat','purr','meow','claw','felidae','puss','paw']
cat_output= ["I know the purrfect pun for that one.",
             "I only tell these puns beclaws I have to."
            ]

然而,'paw'和'claw'这个词也可用于其他动物,其他动物也可能具有相同的潜在输出,如下所示:

dog_input=['dog','woof','bark','paw','canine','pup','puppy','claw']

dog_output=["I only tell these puns beclaws I have to.",
            "I knew a dog who was a little ruff on me."
          ]

正如你所看到的,这并不是最能引起标题问题的最佳方法:什么是最好的面向对象的方法,能够将某些单词分类为某些响应,重复次数较少,并且(如果可能的话) ),你能提出一个基本的例子来解释它的外观吗?

4 个答案:

答案 0 :(得分:1)

也许它是抽象的,或者我没有真正得到你想要的东西。但为什么你有不同的输入?我觉得没关系...我会创建一个简单的词典,将每个单词与它的潜在输出相匹配,然后从中随机地grep ... ...

答案 1 :(得分:0)

如何创建AnimalDog继承的基类Cat?然后,您可以查看单词paw是否与动物匹配,然后随机选择一个Animal个实例。

答案 2 :(得分:0)

这是我将如何做到的:

import random

class Animal:
    def __init__(self, keywords, outputs):
        self.keywords = keywords
        self.outputs = outputs

    def inp(self, keyword):
        if keyword in self.keywords:
            self.outp()

    def outp(self):
        print(random.choice(self.outputs))

my_cat = Animal(["cat", "purr"], ["purrfect pun"])
my_cat.inp("purr")

对于可能针对多个动物的关键字,您可以这样做:

my_cat = Animal(...)
my_dog = Animal(...)
my_bonobo = Animal(...)

animals = [my_cat, my_dog, my_bonobo]
for animal in animals:
    animal.inp("paw")

答案 3 :(得分:0)

试试这个:

(t1,t2) match {
case (Success(v1),Success(v2)) => new MyClass(v1,v2)
case (Failure(e),_) | (_,Failure(e)) => println(e.getMessage)
}

我希望这会有所帮助。如果它不能解决您的需求,请告诉我。此外,明智的做法是让用户更安全。您可以通过将它们添加到两个词典中来实现更多动物。另一种方法是多态继承,如果不起作用,你可以试试。