我正在做大学作业(CRUD),但是,当从列表中删除项目时出现以下错误,我不知道错误是在json的转换中还是在json中的查询中,我已经尝试一切来解决这个问题
Traceback (most recent call last):
File "C:\Users\souza1.pedro\PycharmProjects\pythonProject\Faculdade.py", line 289, in <module>
opcao2()
File "C:\Users\souza1.pedro\PycharmProjects\pythonProject\Faculdade.py", line 206, in opcao2
if professor["codigo"] == codigo_para_remover:
~~~~~~~~~^^^^^^^^^^
TypeError: string indices must be integers, not 'str'
我的代码
import json
# Lista global de estudantes
estudantes = []
professores = []
turmas = []
matriculas = []
# Função para carregar arquivos JSON
def carregar_estudantes():
global estudantes
try:
with open('estudantes.json', 'r', encoding='utf-8') as arquivo:
estudantes = json.load(arquivo)
print("Dados dos estudantes carregados com sucesso.")
except FileNotFoundError:
print("Arquivo de estudantes não encontrado. Começando com lista vazia.")
estudantes = [] # Inicializa como lista vazia se não houver arquivo
except json.JSONDecodeError:
print("Erro ao decodificar o arquivo de estudantes. Começando com lista vazia.")
estudantes = [] # Inicializa como lista vazia se houver erro de decodificação
def carregar_professores():
global professores
try:
with open('professores.json', 'r', encoding='utf-8') as arquivo:
professores = json.load(arquivo)
print("Dados dos professores carregados com sucesso.")
except FileNotFoundError:
print("Arquivo de professores não encontrado. Começando com lista vazia.")
professores = [] # Inicializa como lista vazia se não houver arquivo
except json.JSONDecodeError:
print("Erro ao decodificar o arquivo de professores. Começando com lista vazia.")
professores = [] # Inicializa como lista vazia se houver erro de decodificação
def carregar_turmas():
global turmas
try:
with open('turmas.json', 'r', encoding='utf-8') as arquivo:
turmas = json.load(arquivo)
print("Dados das turmas carregados com sucesso.")
except FileNotFoundError:
print("Arquivo de turmas não encontrado. Começando com lista vazia.")
turmas = [] # Inicializa como lista vazia se não houver arquivo
except json.JSONDecodeError:
print("Erro ao decodificar o arquivo de turmas. Começando com lista vazia.")
turmas = [] # Inicializa como lista vazia se houver erro de decodificação
# Função para salvar todos os dados em seus respectivos arquivos JSON
def salvar_dados():
global estudantes, professores, turmas, matriculas
with open('estudantes.json', 'w', encoding='utf-8') as arquivo:
json.dump(estudantes, arquivo, ensure_ascii=False, indent=4)
with open('professores.json', 'w', encoding='utf-8') as arquivo:
json.dump(professores, arquivo, ensure_ascii=False, indent=4)
with open('turmas.json', 'w', encoding='utf-8') as arquivo:
json.dump(turmas, arquivo, ensure_ascii=False, indent=4)
with open('matriculas.json', 'w', encoding='utf-8') as arquivo:
json.dump(matriculas, arquivo, ensure_ascii=False, indent=4)
print("Dados salvos com sucesso.")
# Menu Principal
def mostrar_menu():
print("1. Gerenciar Estudantes")
print("2. Gerenciar Professores")
print("3. Gerenciar Turmas")
print("4. Gerenciar Matrículas")
print("5. Sair")
# Menu Do Professor
def mostrar_menu_professor():
print("\nMenu de Professores:")
print("1. Incluir")
print("2. Listar")
print("3. Atualizar")
print("4. Excluir")
print("5. Voltar ao Menu Principal")
# Menu Do Estudante
def mostrar_menu_estudante():
print("\nMenu de Estudantes:")
print("1. Incluir")
print("2. Listar")
print("3. Atualizar")
print("4. Excluir")
print("5. Voltar ao Menu Principal")
# Menu Gerenciar matrícula
def menu_gerenciar_matricula():
print("1. Visualizar matrículas")
print("2. Editar")
print("3. Excluir")
print("4. Voltar ao Menu Principal")
# Gerenciar Turmas
def menu_gerenciar_turma():
print("1. Incluir")
print("2. Visualizar")
print("3. Atualizar turmas")
print("4. Excluir")
print("5. Voltar ao Menu Principal")
# Editar código menu
def editar_codigo_estudante():
global estudantes
codigo_atual = input("Digite o código atual do estudante: ")
novo_codigo = input("Digite o novo código do estudante: ")
for estudante in estudantes:
if estudante["codigo"] == codigo_atual:
estudante["codigo"] = novo_codigo
print(f"Código do estudante {estudante['nome']} atualizado com sucesso.")
salvar_dados()
return
print("Estudante com o código atual não encontrado.")
# Opcao 1 do Menu Principal (submenu)
def opcao1():
global estudantes
while True:
mostrar_menu_estudante()
escolha_estudante = input("Escolha uma opção do Menu do Estudante: ")
if escolha_estudante == '1':
nome_geral = input("Coloque o nome do estudante para incluir: ")
Turma_geral = input("Coloque o nome da Turma para incluir: ")
codigo_geral = input("Coloque o código do estudante para incluir: ")
cpf_geral = input("Coloque o CPF do estudante para incluir: ")
if len(cpf_geral) != 11:
print("O CPF deve conter exatamente 11 caracteres. Tente novamente.")
continue # Retorna ao menu de estudantes sem adicionar o estudante
estudantes.append({
"nome": nome_geral,
"Turma": Turma_geral,
"codigo": codigo_geral,
"cpf": cpf_geral,
})
print(f"Estudante {nome_geral} incluído com sucesso.")
salvar_dados()
elif escolha_estudante == '2':
print("Lista de Estudantes:")
for estudante in estudantes:
print(estudante)
elif escolha_estudante == '3':
editar_codigo_estudante()
elif escolha_estudante == '4':
print("Essa área está em desenvolvimento")
elif escolha_estudante == '5':
break
else:
print("Opção inválida. Tente novamente.")
# Opcao 2 do Menu Principal (submenu)
def opcao2():
global professores
while True:
mostrar_menu_professor()
escolha_professor = input("Escolha uma opção do Menu de Professores: ")
if escolha_professor == '1':
codigo_professor = input("Qual o código do professor: ")
nome_professor = input("Qual o nome do professor: ")
cpf_professor = input("Qual o cpf do professor: ")
if len(cpf_professor) != 11:
print("O CPF deve conter exatamente 11 caracteres. Tente novamente.")
continue # Retorna ao menu de professores sem adicionar o professor
# Adiciona um novo professor à lista de professores
novo_professor = {
"codigo": codigo_professor,
"nome": nome_professor,
"cpf": cpf_professor,
}
professores.append(novo_professor)
print(f"Professor {nome_professor} incluído com sucesso.")
salvar_dados()
elif escolha_professor == '2':
print("Lista de Professores:")
for professor in professores:
print(professor)
elif escolha_professor == '3':
codigo_atual1 = input("Digite o código atual do professor: ")
novo_codigo1 = input("Digite o novo código do professor: ")
for professor in professores:
if professor["codigo"] == codigo_atual1:
professor["codigo"] = novo_codigo1
print(f"Código do Professor {professor['nome']} atualizado com sucesso.")
salvar_dados()
return
print("Professor com o código atual não encontrado.")
elif escolha_professor == '4':
codigo_para_remover = input("Coloque o código do professor para remover: ")
# Encontrar e remover o professor com o código fornecido
for professor in professores:
if professor["codigo"] == codigo_para_remover:
professores.remove(professor)
print(f"Professor com o código {codigo_para_remover} foi removido.")
salvar_dados()
break
else:
print("Professor com o código fornecido não encontrado.")
elif escolha_professor == '5':
break
else:
print("Opção inválida. Tente novamente.")
# Opcao 3 do Menu Principal
def opcao3():
global estudantes, turmas
while True:
menu_gerenciar_turma()
Gerenciador_turma = input("Escolha um número para navegar no menu: ")
if Gerenciador_turma == '1':
try:
id_turma = int(input("Qual o id da turma do professor: "))
codigo_professor2 = int(input("Qual o código do professor: "))
except ValueError:
print("ID da turma e código do professor devem ser números inteiros. Tente novamente.")
continue
codigo_disciplina = input("Qual a disciplina do professor: ")
if not isinstance(codigo_disciplina, str) or len(codigo_disciplina) != 5:
print("O código da disciplina deve conter exatamente 5 caracteres. Tente novamente.")
continue # Retorna ao menu de professores sem adicionar a turma
turmas.append({
"ID": id_turma,
"Nome_Professor": codigo_professor2,
"Código_disciplina": codigo_disciplina,
})
print(f"A turma {id_turma} foi incluída com sucesso.")
salvar_dados()
elif Gerenciador_turma == '2':
print("Lista de Turmas:")
for turma in turmas:
print(turma)
elif Gerenciador_turma == '3':
codigo_atual2 = input("Digite o código atual da turma: ")
novo_codigo2 = input("Digite o novo código da turma: ")
for turma in turmas:
if turma["Código_disciplina"] == codigo_atual2:
turma["Código_disciplina"] = novo_codigo2
print(f"Código da Turma {turma['Código_disciplina']} atualizado com sucesso.")
salvar_dados()
return
elif Gerenciador_turma == '4':
print("Área em desenvolvimento")
elif Gerenciador_turma == '5':
break
else:
print("Opção inválida. Tente novamente.")
# Opcao 4 do Menu Principal
def opcao4():
print("Menu de Matrículas - Em desenvolvimento")
# Carregar estudantes, professores e turmas no início do programa
carregar_estudantes()
carregar_professores()
carregar_turmas()
# Loop Principal
try:
while True:
print("Menu Geral")
mostrar_menu()
escolha = input("Escolha uma opção: ")
if escolha == '1':
opcao1()
elif escolha == '2':
opcao2()
elif escolha == '3':
opcao3()
elif escolha == '4':
opcao4()
elif escolha == '5':
print("Saindo...")
break
else:
print("Opção inválida. Tente novamente.")
except KeyboardInterrupt:
print("\nPrograma interrompido pelo usuário.")
# Salvar dados ao sair do programa
salvar_dados()
呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜
我尝试转换字符串但不起作用
要解决此问题,请按照以下步骤操作:
在将数据分配给变量 Professor 之前,检查数据是否是字典列表非常重要。如果没有,则提出错误,表明存在问题。
# Ensure each professor is a dictionary before accessing keys
for professor in professores:
if isinstance(professor, dict) and professor.get("codigo") == codigo_para_remover:
professores.remove(professor)
print(f"Professor com o código {codigo_para_remover} foi removido.")
salvar_dados()
break
else:
print("Professor com o código fornecido não encontrado.")
在访问教授的键(professor["codigo"])之前,此代码片段确定教授是否是字典(isinstance(professor, dict))。这可以通过排除非字典条目来避免 TypeError。