<p>问题的根本原因在于以下两种说法:</p>
<ol>
<li><p><code>self.recente[-1]</code>->;试图获取不存在的数组元素</p>
</li>
<li><p><code>b = self.resp_nome(b)</code>->;在初始化之前引用b</p>
</li>
</ol>
<p><strong>可以通过以下步骤解决问题:</strong></p>
<ol>
<li><p>将语句转换为验证数组中是否存在特定值的条件</p>
<p>即<code>if 'Olá, qual seu nome?' not in self.recente:</code></p>
</li>
<li><p>将自我保护名称(b)替换为自我保护名称(a)</p>
</li>
</ol>
<p><strong>以下是实施了两项更改的工作示例:</strong></p>
<pre><code># File name: python-class-demo.py
class IA():
def __init__(self, nome):
self.nome = nome
self.recente = []
def ouvir(self):
iniciar = input('»')
iniciar = iniciar.upper()
iniciar = iniciar.replace('O ', '')
return iniciar
def pensar(self, iniciar):
if iniciar == 'OI':
return 'Ola, qual seu nome?'
if 'Olá, qual seu nome?' not in self.recente:
a = self.pegar_nome()
b = self.resp_nome(a)
def pegar_nome(self):
pass
def resp_nome(self, iniciar):
pass
def resp(self, iniciar):
self.recente.append(iniciar)
print(iniciar)
tchau = ['TCHAU', 'XAU', 'ATE LOGO', 'ATÉ LOGO', 'ATE MAIS', 'ATÉ MAIS']
while True:
a = IA('Joao')
b = a.ouvir()
if b in tchau:
print('Até mais')
break
c = a.pensar(b)
a.resp(c)
</code></pre>
<p><strong>输出:</strong></p>
<pre><code>>python python-class-demo.py
»as
None
»OU
None
»TCHAU
Até mais
</code></pre>