-
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
resposta atividade #16
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 Sayonara!
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.
Único ponto de atenção seria ter testado as funções que você implementou com uma aluna que foi cadastrada pela função de incluir aluna, pois havia um erro. De resto, está tudo certo, só tome cuidado com o excesso de quebra de linhas, para não tornar o código sujo.
Boa sorte e sucesso na sua jornada! ♥
Parabéns pelo trabalho!
dataset[(nome.split()[0] , nome.split()[1])] = { | ||
"Turma": turma, | ||
"Notas": notas, | ||
"Presença": presença, | ||
"Paticipaçao": nota_participaçao | ||
} |
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.
Cuidado ao tentar salvar um valor sem verificar se ele existe. Se uma pessoa não adiciona um sobrenome, o código retorna erro para salvar.
|
||
return notas | ||
|
||
def chamada(): |
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.
O nome da função chamada() é bastante genérico e não deixa claro o que exatamente a função faz. Para melhorar a clareza e a manutenção do código, o nome da função deve ser mais descritivo em relação à sua funcionalidade. Por exemplo, incluir dados de chamada, consultar chamada, excluir chamada, etc..
|
||
|
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.
Cuidado com o excesso de quebra de linhas no código.
pass | ||
#TODO - Implentar a função |
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 Python, a instrução pass é usada como um placeholder. Ela é útil em situações onde o código precisa de uma declaração sintaticamente, mas você ainda não quer (ou não precisa) escrever o código funcional. Neste caso, como vocês iriam realizar uma implementação posterior, foi utilizado para que vocês substituissem pelo próprio código.
Sugestão:
pass | |
#TODO - Implentar a função |
for i in range(3): | ||
nota=float(input(f"Digite a {i+1}° nota:" )) | ||
notas.append(nota) |
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.
Esta função está simples e clara, o que é muito positivo. Uma sugestão é que como temos uma conversão de dados, uma boa prática é colocar um try except para validar o dado de entrada :)
print("informe o nome da aluna") | ||
nome_completo=input("Nome completo") | ||
nome_aluna,sobrenome_aluna=nome_completo.split() | ||
chave_aluna=(nome_aluna,sobrenome_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.
Para não precisar repetir esse bloco de código em todas as funções, podemos criar uma função de obter_nome_aluna() para receber o nome da aluna.
Sugestão:
print("informe o nome da aluna") | |
nome_completo=input("Nome completo") | |
nome_aluna,sobrenome_aluna=nome_completo.split() | |
chave_aluna=(nome_aluna,sobrenome_aluna) | |
chave_aluna = obter_nome_aluna() | |
def obter_nome_aluna(): | |
print("informe o nome da aluna") | |
nome_completo=input("Nome completo") | |
nome_aluna,sobrenome_aluna=nome_completo.split() | |
return (nome_aluna,sobrenome_aluna) |
|
||
|
||
|
||
|
||
return | ||
|
||
pass | ||
#TODO - Implentar a função |
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.
Neste caso, como a função de consultar é apenas para imprimir os dados da presença, então não precisamos usar o return, dado que não retornamos nenhum dado.
Podemos remover o pass, TODO e o excesso de quebra de linhas também.
Sugestão:
return | |
pass | |
#TODO - Implentar a função |
|
||
|
||
|
||
|
||
|
||
print(f" Notas de {nome_completo}:{nota}" ) | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
return | ||
pass | ||
#TODO - Implentar a função |
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 remover o pass, TODO e o excesso de quebra de linhas também.
Sugestão:
print(f" Notas de {nome_completo}:{nota}" ) | |
return | |
pass | |
#TODO - Implentar a função | |
print(f" Notas de {nome_completo}:{nota}" ) |
"Turma": turma, | ||
"Notas": notas, | ||
"Presença": presença, | ||
"Paticipaçao": nota_participaçao |
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.
Repare que estamos usando uma chave aninhada chamada "Participaçao", e na função de consulta de aprovação, a chave que buscamos é "Participação" com o til. O que causa erro ao buscar dados de alunas que cadastramos posteriormente. É importante manter consistência com os dados que já temos cadastrados no dataset.
Sugestão:
"Paticipaçao": nota_participaçao | |
"Paticipação": nota_participaçao |
faltas=dataset[chave_aluna]["Presença"] | ||
faltas_contagem=faltas.count(False) | ||
media=sum(notas)/len(notas) | ||
if media>=6 and nota_participaçao>=6 and faltas_contagem<=2: |
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.
Neste ponto, era esperado que o cálculo de faltas fosse realizado pelo percentual e não pela quantidade. No requisito funcional é esperado que o cálculo fosse de 80% de presença. Futuramente, com o aumento do dataset, se incluirmos mais dados de presença, esse valor de 2 faltas ficará errado.
Entre operadores, procure adicionar espaços para ajudar na legibilidade do código.
Sugestão:
if media>=6 and nota_participaçao>=6 and faltas_contagem<=2: | |
percentual_faltas = dataset[chave_aluna]["Presença"].count(False) / len(dataset[chave_aluna]["Presença"]) | |
if media >= 6 and nota_participaçao >= 6 and percentual_faltas <= 0.2: |
No description provided.