-
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
Exercício semana 05 #24
base: main
Are you sure you want to change the base?
Conversation
…s aprendizados até então
… 01 "incluir_nova_aluna".
…nova_aluna, obter_notas, obter_presenca e salvar_dados_alunas
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.
Flora, parabéns pelo trabalho!
Fiz uma revisão de código para você e espero que você possa revisar seu projeto e complementar posteriormente com 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.
Boa sorte e sucesso na sua jornada! ♥
Parabéns pelo trabalho!
def salvar_dados_alunas(nome, sobrenome, turma, notas, presenca, participacao): | ||
chave = (nome, sobrenome) | ||
dataset[chave] = { | ||
(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.
A função salvar_dados_alunas está com uma estrutura de dados aninhado diferente da estrutura original do nosso dataset. Como já temos uma tupla na chave, não necessitava de outra tupla no corpo do dicionário. Quando realizamos um teste de consulta de notas com uma aluna cadastrada manualmente, podemos reparar que acaba dando erro por causa da implementação desta função.
Sugestão:
def salvar_dados_alunas(nome, sobrenome, turma, notas, presenca, participacao): | |
chave = (nome, sobrenome) | |
dataset[chave] = { | |
(nome, sobrenome):{ | |
"Turma": turma, | |
"Notas": notas, | |
"Presença": presenca, | |
"Participação": participacao | |
},} | |
def salvar_dados_aluna(nome, sobrenome, turma, notas, presenca, participacao): | |
chave = (nome, sobrenome) | |
dataset[chave] = { | |
"Turma": turma, | |
"Notas": notas, | |
"Presença": presenca, | |
"Participação": participacao | |
} |
sobrenome = input("Agora, informe o sobrenome da aluna: ") | ||
while True: | ||
turma = input ("Informe qual a turma da aluna: ") | ||
if turma == "Turma A" or turma == "Turma B" or turma == "Turma C": |
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.
Adorei a validação por turma, ótima sacada :)
Quando tiver que validar se uma variável possui um valor entre uma lista de valores, podemos usar uma lista para isso:
Sugestão:
if turma == "Turma A" or turma == "Turma B" or turma == "Turma C": | |
if turma in ["Turma A", "Turma B", "Turma C"]: |
|
||
salvar_dados_alunas(nome, sobrenome, turma, notas, presenca, participacao) | ||
|
||
return (nome, sobrenome) |
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 foi adicionado um retorno para a função, mas não utilizamos essa tupla no retorno da função na main, então podemos remover para não gerar complexidade desnecessária.
for chave in dataset.keys(): | ||
print(f"\nAluna: {chave[0]} {chave[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.
Uso da tupla conforme o esperado. Uma opção para trazer maior clareza ao código é desempacotar a tupla em variáveis que fiquem mais fáceis.
Sugestão:
for chave in dataset.keys(): | |
print(f"\nAluna: {chave[0]} {chave[1]}") | |
for nome, sobrenome in dataset.keys(): | |
print(f'Nome: {nome} {sobrenome}') |
|
||
qtd_faltas = dataset[(nome, sobrenome)]["Presença"].count(False) | ||
print(f"A quantidade de faltas de {nome} {sobrenome} é {qtd_faltas}.") | ||
|
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, poderiamos adicionar uma validação para verificar se a aluna está cadastrada na nossa base para evitar erros.
Sugestão:
qtd_faltas = dataset[(nome, sobrenome)]["Presença"].count(False) | |
print(f"A quantidade de faltas de {nome} {sobrenome} é {qtd_faltas}.") | |
chave = (nome, sobrenome) | |
if chave in dataset: | |
qtd_faltas = dataset[(nome, sobrenome)]["Presença"].count(False) | |
print(f"A quantidade de faltas de {nome} {sobrenome} é {qtd_faltas}.") | |
else: | |
print('Aluna não encontrada.') |
def consultar_notas_aluna(): | ||
nome = input("Por favor, nos informe o nome da aluna: ") | ||
sobrenome = input("Agora informe o 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.
Assim como na função de faltas, poderiamos acrescentar uma validação aqui para validar se a aluna existe no dicionário
notas = dataset[(nome, sobrenome)]["Notas"] | ||
media = float(sum(notas)/len(notas)) | ||
qtd_faltas = dataset[(nome, sobrenome)]["Presença"].count(False) | ||
percentual_de_faltas = (qtd_faltas / 5) * 100 |
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.
Apesar de saber que no dataset estamos trabalhando com 5 aulas, poderiamos trabalhar com o tamanho da lista, caso haja inclusão de uma aula no nosso dicionário
Sugestão:
percentual_de_faltas = (qtd_faltas / 5) * 100 | |
percentual_de_faltas = (qtd_faltas / len(dataset[chave]["Presença"])) * 100 |
def consultar_status_aprovacao(): | ||
nome = input("Por favor, nos informe o nome da aluna: ") | ||
sobrenome = input("Agora informe o 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.
Para não precisar ficar usando (nome, sobrenome) toda hora, podemos criar uma variável para guardar a tupla.
Com isso, podemos também validar se essa chave existe no nosso data set.
Sugestão:
chave = (nome, sobrenome) | |
if chave in dataset: |
if media < nota_corte: | ||
print(f"A nota final da aluna {nome} {sobrenome} foi {media:.2f}, abaixo da {nota_corte}. A aluna está reprovada.") | ||
elif percentual_de_faltas > 20: | ||
print(f"A aluna {nome} {sobrenome} está reprovada por falta e sua média final foi {media:.2f}.") | ||
elif nota_participacao <= 6: | ||
print(f"A aluna {nome} {sobrenome} está reprovada por participação e sua média final foi {media:.2f}") | ||
else: | ||
print(f"A aluna {nome} {sobrenome} está aprovada e sua média final foi {media:.2f}") |
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.
Ótimo uso de condicionais e de formatação da saída.
Exercício semana 05 - projeto #1