To tentando fazer um cadastro de aluno onde 1 aluno tem N notas.
O registro ficaria assim: {'codAluno': [1], 'nome': ['Ana'], 'rg': ['33462111'], 'notas': ['9', '7']}
Quando eu inserir mais um aluno, por exemplo com 3 notas: {'codAluno': [1, 2], 'nome': ['Ana', 'Paulo'], 'rg': ['33462111', '4546556'], 'notas': ['9', '7', '4', '6', '8']}
Então Ana ficou com 2 notas e Paulo com 3 notas.
Como faço para saber quais as notas de Ana e Paulo? Ou eu estou fazendo o dicionário errado?
Preciso dessa informação para fazer a parte para imprimir.
Código do sistema:
Alunos = {'codAluno' : [], 'nome' : [], 'rg' : [], 'notas' : []}
numAlunos = 0
cont = 1
# Menu Aluno ------------------------------------------------------------------------------------------//
ok1 = True
while ok1:
print("")
print("1 - Inserir novo aluno")
print("2 - Imprimir lista de alunos")
print("6 - Sair")
menuAluno = input ("\nDigite o numero da opçao desejada: ")
## Sair do menu aluno ----------------------------------------------------------------------//
if menuAluno == '6':
ok1 = False
## 1 - Inserir novo aluno ------------------------------------------------------------------//
if menuAluno == '1':
if numAlunos < 50:
codAluno = cont
nome = input ("Informe o nome do aluno: ")
rg = input ("Informe o RG do aluno: ")
Alunos['codAluno'].append(codAluno)
Alunos['nome'].append(nome)
Alunos['rg'].append(rg)
opcao = '1'
while opcao != '0':
nota = input ("Informe a nota do aluno: ")
Alunos['notas'].append(nota)
opcao = input("Deseja inserir mais notas? 0 = não - 1 = sim")
print(Alunos)
numAlunos = numAlunos + 1
cont = cont + 1
else:
print("\nNumero maximo de Alunos atingido!!")
## 2 - Imprimir lista de Alunos -----------------------------------------------------//
if menuAluno == '2':
for i, j in Alunos.items():
print(i)
for k in j:
print (k)
print ("Finalizando...")
# FIM do Menu Aluno --------------------------------------------------------------------------//
Assim você isola os dados de cada aluno em um dicionário próprio, em vez de misturar tudo no mesmo (que na minha opinião deixa tudo muito mais confuso).
O programa para criar esta estrutura ficaria assim:
alunos = []
cont = 1
while True: # não precisa da variável ok1
print("""
1 - Inserir novo aluno
2 - Imprimir lista de alunos
6 - Sair""")
menuAluno = input("\nDigite o numero da opçao desejada: ")
if menuAluno == '6':
break # sai do while
if menuAluno == '1':
if len(alunos) < 50: # não precisa de variável para controlar a quantidade, posso obter da própria lista
nome = input("Informe o nome do aluno: ")
rg = input("Informe o RG do aluno: ")
novo_aluno = { 'codAluno': cont, 'nome': nome, 'rg': rg, 'notas': [] }
while True:
try:
nota = int(input("Informe a nota do aluno: "))
novo_aluno['notas'].append(nota)
if input("Deseja inserir mais notas? 0 = não - 1 = sim") == '0':
break # sai do while
except ValueError: # validar se foi digitado um número
print('Não foi digitado um número válido')
print(novo_aluno)
alunos.append(novo_aluno)
cont = cont + 1
else:
print("\nNumero maximo de Alunos atingido!!")
elif menuAluno == '2':
for aluno in alunos:
print(f'nome: {aluno["nome"]}, código: {aluno["codAluno"]}, RG: {aluno["rg"]}, notas: {", ".join(map(str, aluno["notas"]))}')
print ("Finalizando...")
Repare que alunos é uma lista com 2 dicionários. Então alunos['codAluno'] não existe (só existiria se alunos fosse um dicionário).
Na verdade você precisa percorrer a lista, e para cada dicionário dela, verificar se o valor corresponde ao que você quer:
alunos = [
{ 'codAluno': 1, 'nome': 'Aluno 1', 'rg': '123', 'notas': [7, 8, 6] },
{ 'codAluno': 2, 'nome': 'Aluno 2', 'rg': '456', 'notas': [8, 5] }
]
consultar = int(input("\nInforme o codigo do aluno: "))
for aluno in alunos: # para cada dicionário da lista de alunos
if consultar == aluno['codAluno']: # verifico o código
print(f'achei: {aluno["nome"]}')
break # pode interromper o loop, pois já encontrei o aluno
else: # se não encontrar nenhum (se não cair no "break"), ele entra neste else
print(f'aluno com código {consultar} não encontrado')
Eu usei um for/else (sim, o else aí não é do if, e sim do for). Basicamente, se não cair no break, ele cai no else - leia a documentação para saber mais.
Como dica geral, eu diria para não tentar coisas aleatórias. Tente primeiro entender as estruturas da linguagem (o que são listas, dicionários, como funcionam os operadores como in, etc), entenda o que cada parte é, e só aí escreva o código. Vai ser bem menos “traumático”
Até que funcionou, mas o problema é o índice 0. Não sabia como por uma variável.
Seu método me ajudou mais uma vez. Obrigado.
Sei mexer no Java. Mas to apanhando no Python.