Enviar um café pro programador

Como Usar um Dicionário em Python

Neste artigo, vamos resolver uma questão, comentar e mostrar seu código. Basicamente, vamos mostrar para você como usar um dicionário em Python, de tão 'completo' que é esse exercício.

Leia também:
  1. Apostila de Python em PDF
  2. Certificado do Curso de Python (para quem deseja trabalhar, ganhar dinheiro e viver de programação)

Exercício de Python


Uma escola te contratou para fazer um software em Python.
Eles querem que você crie um script que exiba o seguinte menu:

0. Sair
1. Exibir lista de alunos com suas notas (cada aluno tem uma nota)
2. Inserir aluno e nota
3. Alterar a nota de um aluno
4. Consultar nota de um aluno específico
5. Apagar um aluno da lista
6. Dar a média da turma

Onde a professora que vai fornecer o nome e nota dos alunos. Quantos ela quiser. Quantas vezes quiser.
Implemente esse script usando um dicionário.

Conhecimentos para resolver essa questão:
O que é ? Para que serve? Como e quando se usa ?
Como exibir items, valores e chaves de um dicionário
Como usar os métodos get() e setdefault()
Adicionar, Alterar e Remover items de um dicionário



Solução comentada

Primeiro, criamos um dicionário de nome alunos e depois chamamos a função que exibe o menu.

  • menu()

Bem, vamos lá.

Primeiro, temos que criar a lógica que vai ficar exibindo esse menu o tempo inteiro.
Ele é exibido enquanto o valor da variável continuar for diferente de 0.
Se for, encerra o menu() e acaba o laço e encerra o programa.

Se for outro valor diferente, vai cair em vários testes condicionais para saber que função correta deve ser chamada.


  • exibir()

Nessa função, vamos simplesmente exibir o dicionário, de maneira bonita e padronizada, os nomes e notas dos alunos.

Para isso, usamos uma variável temporária de nome nome, que vai receber cada uma das chaves (keys), do dicionário de alunos.

Então, imprime o nome e a nota de cada aluno.


  • inserir()

Antes de inserir, usamos o método get() para saber se já existe uma key com aquele nome que estamos querendo inserir.

Se tiver o aluno, o método retorna algum valor, cai no IF e avisamos que não pode inserir.
Se não estiver o aluno, cai no ELSE e criamos um novo item no nosso dicionário.


  • alterar()

Antes de alterar um determinado item, temos que nos certificar que ele existe no dicionário.
Para isso, usamos o operador in.

Se ele existir na lista de keys, faz a alteração.
Se não não faz nada, só exibe uma mensagem avisando isso.


  • consultar()

Idem a lógica anterior.

Se existir o item, exibe.
Senão, avisa.


  • apagar()

Idem.

Primeiro, verificamos se o item existe, consultando sua chave.
Se tiver, usamos o método pop() para retirar o item da lista.


  • media()

Pegamos uma variável e inicializamos com valor 0.
Depois, somamos todos os valores nessa variável e dividimos pelo tamanho do dicionário, através da função len().




Código Python



def menu():
    continuar=1

    while continuar:
        continuar = int(
            input("0. Sair\n"+
                  "1. Exibir lista de alunos com suas notas (cada aluno tem uma nota)\n"+
                  "2. Inserir aluno e nota\n"+
                  "3. Alterar a nota de um aluno\n"+
                  "4. Consultar nota de um aluno específico\n"+
                  "5. Apagar um aluno da lista\n"+
                  "6. Dar a média da turma\n"))
        if continuar==1:
            exibir()
        elif continuar == 2:
            inserir()
        elif continuar == 3:
            alterar()
        elif continuar == 4:
            consultar()
        elif continuar == 5:
            apagar()
        elif continuar == 6:
            media()
        elif continuar == 0:
            print("Encerrando programa")
        else:
            print("Opção inválida")
        
def exibir():
    for nome in alunos.keys():
        print("Nome: ", nome, " - Nota: ", alunos[nome])
        
def inserir():
    nome = input("Digite o nome do aluno: ")
    nota = float(input("Nota dele: "))

    if alunos.get(nome):
        print("Ja existe o aluno ",nome)
    else:
        alunos[nome] = nota
    
def alterar():
    nome = input("Aluno a mudar a nota: ")
    nota = float(input("Nova nota     : "))

    if nome in alunos.keys():
        alunos[nome] = nota
    else:
        print("Não existe esse aluno")
        
def consultar():
    nome = input("Digite o nome do aluno: ")

    if alunos.get(nome):
        print("Nota de ",nome, ": ", alunos[nome])
    else:
        print("Nao existe tal aluno")
    
def apagar():
    nome = input("Apagar que aluno: ")

    if alunos.get(nome):
        alunos.pop(nome)
    else:
        print("Não existe o aluno ",nome)
        
def media():
    soma = 0
    for count in alunos.values():
        soma += count
    print("Média dos alunos: %.2f" % (soma / len(alunos) ))

alunos = {}
menu()

4 comentários:

  1. Olá! A minha reposta foi a seguinte:

    def menu():
    print('0. Sair');
    print('1. Exibir lista de alunos com suas notas (cada aluno tem uma nota)');
    print('2. Inserir aluno e nota');
    print('3. Alterar a nota de um aluno');
    print('4. Consultar nota de um aluno específico');
    print('5. Apagar aluno da lista');
    print('6. Dar a média da turma');
    opc = int(input("> "));
    return opc;

    alunos = {
    'Joao': 10.0,
    'Maria': 9.0,
    'Jose': 10.0
    }

    def aluno(act=1,aluno='',nota=0.0):

    if ( act != 0 and act != 1 and act != 6 ):
    nomeAluno = input('Digite nome aluno: ');

    if ( act == 2 ):
    if nomeAluno not in alunos.keys():
    alunos[nomeAluno] = nota;
    else:
    print(nomeAluno + 'já existe na base.');
    elif ( act == 3 ):
    if nomeAluno in alunos.keys():
    alunos[nomeAluno] = nota;
    else:
    print(nomeAluno + 'não existe na base.');
    elif ( act == 4 ):
    if nomeAluno in alunos.keys():
    print(nomeAluno + 'tem nota igual a' + alunos[nomeAluno]);
    else:
    print(nomeAluno + 'não tem nota ou existe na base.');
    elif ( act == 5 ):
    if nomeAluno in alunos.keys():
    alunos.pop(nomeAluno);
    print(nomeAluno + 'excluido da base.');
    else:
    print(nomeAluno + 'não existe na base.');
    else:
    if ( act == 6 ):
    tamanho = len(alunos);
    totalNotas = 0.0;
    for notaAluno in alunos.values():
    totalNotas += notaAluno;
    media = totalNotas / tamanho;
    print("A media é %.2f do total de notas %.2f" %(media, totalNotas));
    if ( act == 1 ):
    for nomeAluno in alunos.keys():
    print('Aluno ' + nomeAluno + ' nota', alunos[nomeAluno]);

    cont = True;

    while cont:
    cont = menu();
    if cont == 1:
    aluno();
    elif cont == 2:
    notaAluno = float(input('Digite nota aluno: '));
    aluno(2,nota=notaAluno);
    elif cont == 3:
    notaAluno = float(input('Digite nova nota aluno: '));
    aluno(3,nota=notaAluno);
    elif cont == 4:
    aluno(4);
    elif cont == 5:
    aluno(5);
    elif cont == 6:
    aluno(6);

    Empreguei a linha de raciocínio correta? Obrigado.

    ResponderExcluir
  2. Dei um upgrade no código, quem quiser dar uma olhada...


    def menu():
    val = 1
    while val == 1:
    val = int(input('\n0.Sair\n'
    '1.Exibir lista de alunos\n'
    '2.Inserir novo aluno com nota\n'
    '3.Alterar nota de um aluno\n'
    '4.Consulta\n'
    '5.Deletar aluno\n'
    '6.Média\n'))
    if val == 0:
    print('Menu encerrado')
    elif val == 1:
    exibir()
    elif val == 2:
    inserir()
    elif val == 3:
    alterar()
    elif val == 4:
    consulta()
    elif val == 5:
    apagar()
    elif val == 6:
    media()

    def exibir():
    for aluno in alunos.keys():
    print('Nome:', aluno, '\nNota:', alunos[aluno])



    def inserir():
    while True:
    aluno = str(input('Nome do aluno: '))
    nota = float(input('Nota: '))

    if alunos.get(aluno):
    print('O aluno já existe')
    else:
    alunos[aluno] = nota
    temp = int(input('1.Inserir mais um aluno\n'
    '2.Voltar ao menu\n'))
    if temp == 1:
    continue
    elif temp == 2:
    menu()
    break
    return alunos

    def alterar():
    while True:
    aluno = str(input('Aluno que deseja alterar a nota: '))
    nota = float(input('Digite a nova nota: '))
    if aluno in alunos.keys():
    alunos[aluno] = nota
    else:
    print('Esse aluno não existe.')
    continue
    temp = int(input('1. Voltar ao menu\n'
    '2. Digitar novamente\n'))
    if temp == 1:
    menu()
    break
    elif temp == 2:
    continue

    def consulta():
    while True:
    aluno = str(input('Qual aluno deseja consultar? '))

    if alunos.get(aluno):
    print('A nota do aluno',aluno,'é',alunos[aluno])
    else:
    print('Este aluno não consta no sistema')
    temp = int(input('1.Realizar outra consulta\n'
    '2.Voltar ao menu\n'))
    if temp == 1:
    continue
    elif temp == 2:
    menu()
    break

    def apagar():
    while True:
    aluno = str(input('Qual aluno deseja apagar do sistema? '))
    if alunos.get(aluno):
    alunos.pop(aluno)
    else:
    print('Este aluno não existe')
    temp = int(input('1.Retirar mais um aluno\n'
    '2.Voltar ao menu\n'))
    if temp == 1:
    continue
    elif temp == 2:
    menu()
    break

    def media():
    soma = 0
    for count in alunos.values():
    soma += count
    print('A média dos alunos é %.2f' %(soma/len(alunos)))

    alunos = {}
    menu()

    ResponderExcluir
  3. minha função menu ficou assim:

    def menu():
    print("\n0. Sair\n"+
    "1. Exibir lista de alunos com suas notas \n"+
    "2. Inserir aluno e nota\n"+
    "3. Alterar a nota de um aluno\n"+
    "4. Consultar nota de um aluno específico\n"+
    "5. Apagar um aluno da lista\n"+
    "6. Dar a média da turma\n")

    op = int(input('Escolha uma opção: '))

    if op==2:
    alternar()
    elif op==1:
    exib()
    elif op==3:
    inserir()
    elif op==4:
    consult()
    elif op==5:
    apagar()
    elif op==6:
    media()
    else:
    print('Opção inválida.')

    ResponderExcluir
  4. #functions

    '-----/MENU\-----'

    def menu (options,students):
    print ("-Menu-")
    for item in range (len (options)):
    print ("(%d)-%s"%(item,options[item]))
    choise = int (input ("What do you want?\n-"))
    if choise == 0:
    print ("Program finished.")
    elif choise == 1:
    print ()
    showstudents(students)
    elif choise == 2:
    print ()
    addestudent(students)
    elif choise == 3:
    print ()
    changenote(students)
    elif choise == 4:
    print ()
    consultnote(students)
    elif choise == 5:
    print ()
    deletestudent(students)
    elif choise ==6:
    print ()
    classaverage(students)

    '-----/SHOW STUDENTS NOTES\-----'

    def showstudents(students):
    for student in students:
    print (student, students[student])
    print ()
    menu(options,students)

    '-----/ADD STUDANT AND NOTE\-----'

    def addestudent(students):
    print ("type close to exit.")
    name = input ("student name:")
    if name == 'close':
    menu(options,students)
    elif students.get(name) == None:
    note = float (input ("student note:"))
    students[name] = note
    else:
    print("this student already exist!\n")
    print ()
    addestudent(students)

    '-----/CHANGE STUDENT NOTE\-----'

    def changenote (students):
    name = input ("You want to change the grade of which student?\n")
    if name in students.keys():
    students[name] = float (input ("New note of %s:"%name))
    else:
    print ("this student not exist!")
    print ()
    menu(options,students)

    '----/CONSULT A SPECIFIC STUDENT NOTE\----'

    def consultnote(students):
    name = input ("You want to see the grade of which student?\n")
    if name in students.keys():
    print (students[name])
    else:
    print ()
    '----/delete student\--'

    def deletestudent(students):
    name = input ("Which student you want to delete?\n")
    if name in students.keys():
    students.pop(name)
    else:
    print("this student already not exist")
    print ()
    menu(opitions,students)

    def classaverage(students):
    total = 0
    for item in students:
    total += item
    average = total / len(students)
    menu(opitions,students)


    #tuples

    options = ('Exit','Show students with your notes','Add studant and note','Change student note',
    'See an specific student note','Delete student','Class average')

    #dictionaries

    students = {}

    #call functions

    menu(options,students)

    ResponderExcluir