"TypeError: ___ object is not subscriptable" in Python and how can I fix it?
"TypeError: ___ object is not subscriptable" in Python and how can I fix it?
我的任务是使用队列和 class 构建代码,您可以在其中获得三个选项:
- 生成一个新号码
- 调用队列的第一个号码并将其从主队列中取出(为此有一个辅助队列)
- 显示已拨号码
这是 class 创建的:
class Fila:
def __init__(self):
self._vet = []
def enqueue(self, item): # enfileirar
self._vet.append([-1])
def dequeue(self): # desenfileirar
self._vet.pop(0)
def front(self): # mostrar o 1o da fila, sem remover!
return(self._vet[1])
def is_empty(self): # retorna se a fila esta vazia
if len(self._vet) == 0:
return True
return False
def __len__(self):
return len(self._vet)
def __str__(self): # representacao da fila como string
return str(self._vet)
这是我想出的代码:
from classeFila import *
if __name__ == "__main__":
f1 = Fila()
fAux = Fila()
contador = 0
while True:
opcao = int(input("Digite 1 para obter nova senha, 2 para chamar próxima senha ou 3 para mostrar senhas chamadas."))
if opcao == 1:
contador += 1
f1.enqueue(contador)
print("Sua senha é a de número", contador)
elif opcao == 2:
print("Senha número", f1[0], "está sendo chamada." )
fAux.enqueue(f1[0])
f1.dequeue()
elif opcao == 3:
print(fAux)
else:
print("Digite um número válido.")
问题是,在我 运行 代码和输入选项编号 2 的那一刻,我得到错误:
Traceback (most recent call last):
File "c:\Users\thoma\Desktop\Projetos Python\Fahad\Filas\senhas.py", line 16, in \<module\>
print("Senha número", f1\[0\], "está sendo chamada." )
TypeError: 'Fila' object is not subscriptable
虽然我知道这里的问题是尝试使用索引,但我在解决方案方面做得不够好,因为我无法指定正在调用的号码(f1[0] in "elif opcao == 2 ") 而不使用索引。有指导吗?
尝试取出上面提到的f1[0]中的索引,虽然程序可以运行,但终端会显示“Senha número [-1, -1] está sendo chamada”,或“正在呼叫号码 [-1, -1]”,如果您愿意的话。
添加 __getitem__
函数,这将允许您在代码中使用 f1[0]
,这将从 0
的索引处获取 f1
内的元素内部 _vet
数组 read more here
class Fila:
def __init__(self):
self._vet = []
def enqueue(self, item): # enfileirar
self._vet.append([-1])
def dequeue(self): # desenfileirar
self._vet.pop(0)
def front(self): # mostrar o 1o da fila, sem remover!
return(self._vet[1])
def is_empty(self): # retorna se a fila esta vazia
if len(self._vet) == 0:
return True
return False
def __len__(self):
return len(self._vet)
def __str__(self): # representacao da fila como string
return str(self._vet)
def __getitem__(self, key): # this allows getting an element (overrided method)
return self._vet[key]
我的任务是使用队列和 class 构建代码,您可以在其中获得三个选项:
- 生成一个新号码
- 调用队列的第一个号码并将其从主队列中取出(为此有一个辅助队列)
- 显示已拨号码
这是 class 创建的:
class Fila:
def __init__(self):
self._vet = []
def enqueue(self, item): # enfileirar
self._vet.append([-1])
def dequeue(self): # desenfileirar
self._vet.pop(0)
def front(self): # mostrar o 1o da fila, sem remover!
return(self._vet[1])
def is_empty(self): # retorna se a fila esta vazia
if len(self._vet) == 0:
return True
return False
def __len__(self):
return len(self._vet)
def __str__(self): # representacao da fila como string
return str(self._vet)
这是我想出的代码:
from classeFila import *
if __name__ == "__main__":
f1 = Fila()
fAux = Fila()
contador = 0
while True:
opcao = int(input("Digite 1 para obter nova senha, 2 para chamar próxima senha ou 3 para mostrar senhas chamadas."))
if opcao == 1:
contador += 1
f1.enqueue(contador)
print("Sua senha é a de número", contador)
elif opcao == 2:
print("Senha número", f1[0], "está sendo chamada." )
fAux.enqueue(f1[0])
f1.dequeue()
elif opcao == 3:
print(fAux)
else:
print("Digite um número válido.")
问题是,在我 运行 代码和输入选项编号 2 的那一刻,我得到错误:
Traceback (most recent call last):
File "c:\Users\thoma\Desktop\Projetos Python\Fahad\Filas\senhas.py", line 16, in \<module\>
print("Senha número", f1\[0\], "está sendo chamada." )
TypeError: 'Fila' object is not subscriptable
虽然我知道这里的问题是尝试使用索引,但我在解决方案方面做得不够好,因为我无法指定正在调用的号码(f1[0] in "elif opcao == 2 ") 而不使用索引。有指导吗?
尝试取出上面提到的f1[0]中的索引,虽然程序可以运行,但终端会显示“Senha número [-1, -1] está sendo chamada”,或“正在呼叫号码 [-1, -1]”,如果您愿意的话。
添加 __getitem__
函数,这将允许您在代码中使用 f1[0]
,这将从 0
的索引处获取 f1
内的元素内部 _vet
数组 read more here
class Fila:
def __init__(self):
self._vet = []
def enqueue(self, item): # enfileirar
self._vet.append([-1])
def dequeue(self): # desenfileirar
self._vet.pop(0)
def front(self): # mostrar o 1o da fila, sem remover!
return(self._vet[1])
def is_empty(self): # retorna se a fila esta vazia
if len(self._vet) == 0:
return True
return False
def __len__(self):
return len(self._vet)
def __str__(self): # representacao da fila como string
return str(self._vet)
def __getitem__(self, key): # this allows getting an element (overrided method)
return self._vet[key]