-
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
Atividade Semanal #26
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.
Olá Williane!
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.
Note que no seu código a função incluir_nova_aluna e consultar_status_aprovação estão calculando status de aprovação da aluna. O ideal é que cada função tenha uma única responsabilidade, por isso, posteriormente pense em como pode refatorar para que não tenha duplicidade no código.
Boa sorte e sucesso na sua jornada! ♥
quantidade_notas = int(input("Quantas notas serão inseridas? ")) | ||
notas_aluna = [] | ||
for i in range(quantidade_notas): | ||
while True: | ||
try: | ||
nota = float(input(f"Insira a nota #{i+1}: ")) | ||
if nota < 0 or nota > 10: | ||
print("Nota fora do intervalo permitido (0-10). Tente novamente.") | ||
else: | ||
notas_aluna.append(nota) | ||
break | ||
except ValueError: | ||
print("Valor inválido. Insira um número válido para a 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.
Aqui poderiamos criar uma função para que a função incluir_nova_aluna não tivesse tantas responsabilidades. Em uma refatoração, podemos mover esta e a parte de presenças para novas funções :)
Adorei que você conseguiu aplicar os conceitos aprendidos em sala de aula.
@@ -0,0 +1,187 @@ | |||
# Definindo o dataset diretamente no programa | |||
dataset = {} |
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 dataset já estava definido e importado, essa parte não precisava ter alterado. Do modo como está, ele não está recuperando os dados do dicionário que estava existente. Quando usamos o import, conseguimos usar os dados e funções de outros arquivos python no nosso arquivo atual.
Sugestão:
dataset = {} | |
from dataset_alunas import dataset |
Neste caso, é só usar o dataset igual usamos em sala de aula;
if presenca not in ['true', 'false']: | ||
raise ValueError("Valor inválido. Insira 'True' ou 'False'.") | ||
else: | ||
presenca_aluna.append(presenca == 'true') |
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.
Este é um ótimo uso do retorno de dado booleano implícito para adicionar o dado a uma lista. Cuidado com o uso de referências externas no código, sei que neste ponto tem um pouco de lógica mais avançada, assegure-se de conseguir implementar sozinha.
if participacao < 0 or participacao > 10: | ||
raise ValueError("Nota de participação fora do intervalo permitido (0-10).") | ||
else: | ||
break | ||
except ValueError as e: | ||
print(e) |
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 não necessáriamente precisaria usar um raise ValueError, poderia ser um print. Assim, teriamos a mesma lógica com implementação mais simples. Neste ponto, caso insiramos uma letra, recebemos uma mensagem de exception não tratado, que é a mensagem retornada pela linha 87.
Sugestão:
if participacao < 0 or participacao > 10: | |
raise ValueError("Nota de participação fora do intervalo permitido (0-10).") | |
else: | |
break | |
except ValueError as e: | |
print(e) | |
if participacao < 0 or participacao > 10: | |
print("Nota de participação fora do intervalo permitido (0-10).") | |
else: | |
break | |
except ValueError: | |
print("Entrada inválida. Por favor, insira um número.") |
for chave in dataset.keys(): | ||
print(chave) |
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 consultar_lista_alunas é um exercício para manipular tuplas, aqui fica uma sugestão de como podemos trabalhar com tuplas. Neste exemplo, criei duas variáveis (nome e sobrenome) para nomear o primeiro e segundo elemento da tupla:
Sugestão:
for chave in dataset.keys(): | |
print(chave) | |
for nome, sobrenome in dataset.keys(): | |
print(f'Nome: {nome} {sobrenome}') |
dataset[chave] = { | ||
"Turma": turma, | ||
"Notas": notas_aluna, | ||
"Presença": presenca_aluna, | ||
"Nota de Participação": participacao, | ||
"Status": status, | ||
"Média Final": round(media, 2) # Arredonda a média final para duas casas decimais | ||
} |
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 que foram incluídos mais elementos no dicionário. Parabéns pelo bom uso :)
status = "Recuperação" | ||
fez_recuperacao = input("\nA média da aluna está baixa. Ela fez prova de recuperação? ").lower() | ||
if fez_recuperacao == 'sim': | ||
while True: | ||
try: | ||
nota_recuperacao = float(input("Insira a nota de recuperação: ")) | ||
if nota_recuperacao < 0 or nota_recuperacao > 10: | ||
raise ValueError("Nota de recuperação fora do intervalo permitido (0-10).") | ||
else: | ||
break | ||
except ValueError as e: | ||
print(e) |
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 projeto de casa, não precisava incluir a parte de recuperação, mas ótimo trabalho em criar fluxos adicionais.
print(chave) | ||
|
||
def consultar_faltas_aluna(): | ||
nome_aluna = input("\nDigite o nome completo da aluna para consultar as 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.
O dicionário possui uma tupla como chave. Aqui está uma sugestão de implementação simples:
Sugestão:
nome_aluna = input("\nDigite o nome completo da aluna para consultar as faltas: ") | |
nome = input('Informe o nome da aluna: ') | |
sobrenome = input('Informe o sobrenome da aluna: ') | |
nome_aluna = (nome, sobrenome) |
if nome_aluna in dataset: | ||
notas = dataset[nome_aluna]["Notas"] | ||
presenca = dataset[nome_aluna]["Presença"] | ||
participacao = dataset[nome_aluna]["Nota de Participação"] | ||
|
||
if len(notas) == 0: | ||
print("\nNão há notas registradas para esta aluna.") | ||
return | ||
|
||
media = sum(notas) / len(notas) | ||
percent_presenca = presenca.count(True) / len(presenca) * 100 | ||
|
||
if participacao >= 6 and percent_presenca >= 80 and media >= 6: | ||
status = "Aprovada" | ||
elif 3 <= media < 6: | ||
status = "Recuperação" | ||
else: | ||
status = "Reprovada" | ||
|
||
print(f"\nStatus de aprovação da aluna '{nome_aluna}': {status}") | ||
print(f"Média final: {media:.2f}") | ||
if status == "Recuperação": | ||
print(f"Nota de recuperação necessária para aprovação: {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.
Como na função incluir_nova_aluna foi adicionado um elemento chamado "Status", podemos só retornar o valor que está nele.
Sugestão:
if nome_aluna in dataset: | |
notas = dataset[nome_aluna]["Notas"] | |
presenca = dataset[nome_aluna]["Presença"] | |
participacao = dataset[nome_aluna]["Nota de Participação"] | |
if len(notas) == 0: | |
print("\nNão há notas registradas para esta aluna.") | |
return | |
media = sum(notas) / len(notas) | |
percent_presenca = presenca.count(True) / len(presenca) * 100 | |
if participacao >= 6 and percent_presenca >= 80 and media >= 6: | |
status = "Aprovada" | |
elif 3 <= media < 6: | |
status = "Recuperação" | |
else: | |
status = "Reprovada" | |
print(f"\nStatus de aprovação da aluna '{nome_aluna}': {status}") | |
print(f"Média final: {media:.2f}") | |
if status == "Recuperação": | |
print(f"Nota de recuperação necessária para aprovação: {media:.2f}") | |
if nome_aluna in dataset: | |
status = dataset[nome_aluna]["Status"] | |
print(f"\nStatus de aprovação da aluna '{nome_aluna}': {status}") | |
print(f"Média final: {media:.2f}") | |
if status == "Recuperação": | |
print(f"Nota de recuperação necessária para aprovação: {media:.2f}") |
No description provided.