Projeto guiado 1 - Sistema reprograma - Veronica#32
Projeto guiado 1 - Sistema reprograma - Veronica#32veronica-toledo-bm wants to merge 11 commits intoreprograma:mainfrom
Conversation
mayulabs
left a comment
There was a problem hiding this comment.
Oi Veronica!
Fiz uma revisão de código (code review) para você e espero que você possa revisar seu projeto e colocar posteriormente mais coisas. Futuramente, se quiser complementar mais o sistema, você pode pensar em encapsular as funcionalidades, dando mais especifidade a função e dando responsabilidades únicas para ela.
Vi que você acabou não testando seu projeto com uma aluna inserida manualmente, depois revisite este item. Quando construir um projeto é importante além de testar as funções individualmente, testar como elas interagem entre si.
Boa sorte e sucesso na sua jornada! ♥
Parabéns pelo trabalho!
|
|
||
| #Inclusão da aluna no dataset | ||
|
|
||
| dataset[nome, sobrenome] = {"Turma": turma, "Notas": notas, "Presença": presenca, "Participação": participacao} |
There was a problem hiding this comment.
No salvamento dos dados, a gente deve usar uma tupla ao invés de uma lista, se não, teremos erro no modo como tratamos os dados posteriormente, pois nosso dado no dicionário é de um tipo e estamos salvando com outro
Sugestão:
| dataset[nome, sobrenome] = {"Turma": turma, "Notas": notas, "Presença": presenca, "Participação": participacao} | |
| dataset(nome, sobrenome) = {"Turma": turma, "Notas": notas, "Presença": presenca, "Participação": participacao} |
| try: | ||
| nome = input("Digite o nome da aluna... ") | ||
| except ValueError: | ||
| print("Entrada invalida, digite apenas o nome... ") |
There was a problem hiding this comment.
No código atual, você está usando try-except para capturar exceções de ValueError, mas o uso disso não é apropriado para capturar erros de entrada inválida como você espera. No caso de input, você não espera um ValueError diretamente, então o try-except não é necessário aqui.
| for A_P in presenca: | ||
| if A_P == "A": | ||
| presenca_convertida.append(False) | ||
| elif A_P == "P": | ||
| presenca_convertida.append(True) | ||
| else: | ||
| presenca_convertida.append("Presença invalida.") | ||
|
|
||
| presenca = presenca_convertida |
There was a problem hiding this comment.
Aqui podemos simplificar a parte do split e colocar no for, e dar um nome de variável mais intuitivo para a presença atual
Sugestão:
| for A_P in presenca: | |
| if A_P == "A": | |
| presenca_convertida.append(False) | |
| elif A_P == "P": | |
| presenca_convertida.append(True) | |
| else: | |
| presenca_convertida.append("Presença invalida.") | |
| presenca = presenca_convertida | |
| presenca_convertida = [] | |
| for estado in presenca.split(): | |
| if estado == "A": | |
| presenca_convertida.append(False) | |
| elif estado == "P": | |
| presenca_convertida.append(True) | |
| else: | |
| print(f"Presença '{estado}' inválida. Use 'A' para ausente e 'P' para presente.") | |
| return |
| #Covertendo lista str para Lista int | ||
| notas_int = [] | ||
| for nota in notas: | ||
| notas_int.append(int(nota)) #pegando todas as string notas do professor e convertendo para numero inteiro |
There was a problem hiding this comment.
Um lembrete amigável é que nota é sempre float, pois é um valor decimal.
| chaves = list(dataset.keys()) #Pegando as chaves do dicionario | ||
|
|
||
| for aluna in chaves: | ||
| print("Aluna: ", aluna[0], aluna[1]) #Print aluna: (nome e sobrenome da aluna) |
There was a problem hiding this comment.
Em vez de criar uma lista de chaves (chaves = list(dataset.keys())) e iterar sobre ela, você pode iterar diretamente sobre o dicionário dataset.keys(). Isso simplifica o código e torna o processo mais eficiente.
- Utilizamos diretamente dataset.keys() para iterar sobre as chaves do dicionário.
- Cada chave (nome, sobrenome) é desestruturada no próprio loop for.
- O print é formatado para exibir o nome completo da aluna de forma clara e legível.
Sugestão:
| chaves = list(dataset.keys()) #Pegando as chaves do dicionario | |
| for aluna in chaves: | |
| print("Aluna: ", aluna[0], aluna[1]) #Print aluna: (nome e sobrenome da aluna) | |
| for nome, sobrenome in dataset.keys(): | |
| print(f"Aluna: {nome} {sobrenome}") |
| n_faltas = 0 | ||
| n_presencas = 0 |
There was a problem hiding this comment.
Você poderia usar a função count do python para contar as faltas e presenças. Inicialmente é bom para treinar a lógica de programação, mas usar a função count torna seu código mais limpo e fácil de ver, em relação a um for.
Sugestão:
| n_faltas = 0 | |
| n_presencas = 0 | |
| n_faltas = presenca.count(False) | |
| n_presencas = presenca.count(True) |
| avaliacao = 1 | ||
| print("A aluna", nome_aluna_escolhida, "teve às seguintes notas:") | ||
| for nota in notas: | ||
| print("Avaliação:", avaliacao, "Nota:", nota) | ||
| avaliacao += 1 |
There was a problem hiding this comment.
Podemos usar enumerate(notas, start=1) para iterar sobre a lista de notas (notas) começando a contagem de avaliação de 1. Isso elimina a necessidade de uma variável separada (avaliacao) para contar as avaliações manualmente.
Sugestão:
| avaliacao = 1 | |
| print("A aluna", nome_aluna_escolhida, "teve às seguintes notas:") | |
| for nota in notas: | |
| print("Avaliação:", avaliacao, "Nota:", nota) | |
| avaliacao += 1 | |
| for avaliacao, nota in enumerate(notas, start=1): | |
| print(f"Avaliação {avaliacao}: Nota {nota}") | |
| return notas |
| def consultar_status_aprovacao(): | ||
| nome_aluna_escolhida = input("Digite o nome e sobrenome da aluna que queira consultar o status de aprovação: ") | ||
| nome_aluna = tuple(nome_aluna_escolhida.split(" ")) #Pegando a string com nome e sobrenome e converte em uma tupla | ||
|
|
||
| nota_corte = 6 | ||
|
|
||
| print("Para sabermos o status de aprovação da aluna vamos ter que consultar sua nota, participação e presença em aulas") | ||
| print("Vamos começar pela nota.") | ||
|
|
||
| notas = consultar_notas_aluna(dataset) #Chamando a função para consultar as notas da aluna | ||
| media_notas = sum(notas) / len(notas) #Calculando a média: com a somas das notas, dividido pelo numero de notas | ||
|
|
||
| print("Agora sua participação.") | ||
| participacao = dataset[nome_aluna]["Participação"] | ||
| print("A aluna", nome_aluna_escolhida, "teve nota", participacao, "de participação.") | ||
|
|
||
| print("Por ultimo a presença.") | ||
| porcentagem_presenca = consultar_faltas_aluna(dataset) | ||
| print("A aluna", nome_aluna_escolhida, "teve", int(porcentagem_presenca), "% de presença.") | ||
|
|
||
| print("") | ||
|
|
||
| if media_notas >= 6 and porcentagem_presenca >= 80 and participacao >= 6: | ||
| print("A aluna", nome_aluna_escolhida, "esta aprovada.") | ||
| else: print("A aluna", nome_aluna_escolhida, "esta reprovada.") |
There was a problem hiding this comment.
Boa implementação da função de calcular aprovação :)
Uma sugestão é validar se a aluna existe no dataset, para evitar que o código quebre ao tentar acessar uma chave que não existe
Projeto concluído informações técnicas no arquivo README.md