我正在尝试制作AI。 AI知道对“ hi”说“ Hello”,并在“ bye”上停止该程序,如果您说了什么,它不知道会要求您定义它。例如,如果您说“你好”,它将询问这是什么意思。您输入“ hi”,从此以后,当您说“ Hello”时,它将再说“ Hello”。我将所有内容存储在一个称为“知识”的列表中。它是这样的:
knowledge = [[term, definition], [term, definition], [term, definition]]
我试图添加一个编辑功能,在其中键入edit foo
,它将要求您输入字符串,以更改foo
的定义。但是,我被卡住了。首先,当然,我需要测试它是否已经为foo
定义。但是我做不到。无论定义如何,我都必须能够做到。在其他语言中,有typeOf()
。但是type()
似乎不起作用。这是我的东西,但是不起作用:
if [term, type(str)] in knowledge:
有人可以帮忙吗?
答案 0 :(得分:0)
正如tehhowch在评论中所指出的,dictionary会更合适,因为它们是“键:值”对。
使用字典...
knowledge = {'foo': 'foo def', 'bar': 'bar def', 'baz': 'baz def'}
searchTerm= 'foo'
searchTerm in knowledge
Out[1]: True
将knowledge
存储为列表列表失败,因为knowledge
中的每个项目本身就是一个列表。因此,在这些列表中搜索字符串类型(您的术语)会失败。相反,您可以将术语作为一个单独的列表拉出,然后检查要查找的术语是否在一个列表中。
knowledge = [["foo", "foo definition"], ["bar", "bar definition"], ["baz", "baz
definition"]]
terms = [item[0] for item in knowledge]
searchTerm= "foo"
searchTerm in terms
Out[1]: True
答案 1 :(得分:0)
您可以使用字典来存储定义,而不是列表列表,而python的isinstance
函数将帮助您检查term
是否属于特定类。参见以下示例:
knowledge = {'Hello':'greeting','Hi':'greeting','Bye':'good bye'}
term = "Hello"
if isinstance(term, str):
if term in knowledge:
print("Defination exist")
else:
print("Defination doesn't exist")
else:
print("Entered term is not string")
答案 2 :(得分:0)
正如其他人提到的那样,Python通常会为这种关联数组使用字典。您的方法类似于称为Association List的Lisp数据结构。这些命令的效率不如字典使用的哈希表结构,但它们仍然具有一些有用的属性。
例如,如果您通过扫描成对的密钥并查找第一个密钥来查找密钥,则意味着您可以在前面插入具有相同密钥的另一对密钥 ,这将使密钥隐藏旧值。您不必删除它。这样可以加快插入速度(至少使用Lisp样式的链表)。您也可以通过删除新操作来“撤消”该操作,然后扫描程序将找到旧操作。
您的支票if [term, type(str)] in knowledge:
可以像
if [term, str] in ([term, type(definition)] for term, definition in knowledge):
这使用生成器表达式将您的term, definition
对立即转换为term, type(definition)
对。