-
Notifications
You must be signed in to change notification settings - Fork 40
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Projeto guiado 1 - Sistema reprograma - Veronica #32
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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