Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions exercicios/para-casa/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
## Sistema da Escola Reprograma!

Nós somos da escola Reprograma, e queremos poder utilizar um sistema que nos auxilie no controle de algumas questões dentro do nosso dia-a-dia. Todas os nossos cálculos acabam sendo manuais, o que demanda muito tempo de nossos professores. Quero pedir uma ajuda a você para que nos auxilie nesta difícil missão. Como usuária, quero que este sistema tenha 5 funcionalidades importantes:

- Inclusão de uma nova aluna na minha base de dados
- O sistema deve permitir a inclusão de uma nova aluna com os seguintes dados: nome, sobrenome, turma, notas (uma lista de números), presença (uma lista de booleanos indicando a presença em cada aula) e participação (um número representando o nota de participação da aluna).
- Após a inclusão, o sistema deve exibir uma confirmação de que a aluna foi adicionada com sucesso.
Expand Down
Binary file not shown.
2 changes: 1 addition & 1 deletion exercicios/para-casa/dataset_alunas.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,4 @@
"Presença": [True, True, True, False, True],
"Participação": 7.5
}
}
}
167 changes: 124 additions & 43 deletions exercicios/para-casa/sistema_de_alunas.py
Original file line number Diff line number Diff line change
@@ -1,59 +1,140 @@
from dataset_alunas import dataset


def main():
print("\n--- Seja bem vinda a Escola do Reprograma! ---")
print("Sistema de informações de alunas")

while True:
cod_opcao = obter_opcao()

if cod_opcao == 1: incluir_nova_aluna()
elif cod_opcao == 2: consultar_lista_alunas()
elif cod_opcao == 3: consultar_faltas_aluna()
elif cod_opcao == 4: consultar_notas_aluna()
elif cod_opcao == 5: consultar_status_aprovacao()
elif cod_opcao == 6: print("Encerrando o programa..."); break

def obter_opcao():
codigo_opcao = 0

while codigo_opcao not in [1, 2, 3, 4, 5, 6]:
cod_opcao = serviço_escolhido()

if cod_opcao == 1:
obter_dados() # Incluir nova aluna
elif cod_opcao == 2:
consultar_lista_alunas()
elif cod_opcao == 3:
consultar_faltas_aluna()
elif cod_opcao == 4:
consultar_notas_aluna()
elif cod_opcao == 5:
consultar_status_aprovacao()
elif cod_opcao == 6:
print("Encerrando o programa...")
break

def serviço_escolhido():
while True:
try:
codigo_opcao = int(input("\nEscolha uma opção:\n"
"1 - Incluir uma nova aluna\n"
"2 - Consultar lista de alunas\n"
"3 - Consultar faltas da aluna\n"
"4 - Consultar notas da aluna\n"
"5 - Consultar status de aprovação\n"
"6 - Sair do sistema\n"
"Opção: "))

if codigo_opcao not in [1, 2, 3, 4, 5, 6]:
print("Opção inválida. Por favor, escolha uma opção válida (1 a 5).\n")
cod_opcao = int(input("\nEscolha uma opção:\n"
"1 - Incluir uma nova aluna\n"
"2 - Consultar lista de alunas\n"
"3 - Consultar faltas da aluna\n"
"4 - Consultar notas da aluna\n"
"5 - Consultar status de aprovação\n"
"6 - Sair do sistema\n"
"Opção: "))
if cod_opcao not in [1, 2, 3, 4, 5, 6]:
print("Opção inválida. Por favor, escolha uma opção válida (1 a 6).\n")
else:
return cod_opcao
except ValueError:
print("Entrada inválida. Por favor, digite um número inteiro.\n")

return codigo_opcao

def incluir_nova_aluna():
pass
#TODO - Implentar a função


def obter_dados():
nome = input('Qual o nome da nova aluna?: ').title()
sobrenome = input(f'Qual sobrenome da {nome}?: ').title()
Comment on lines +45 to +46

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ótima sacada em usar o title para padronizar a entrada dos nomes com letra maiúscula! :)

turma = input(f'Qual turma a {nome, sobrenome} pertence?: ')
lista_presença = obter_presença()
nota_participação = float(input('Participação da nova aluna: '))
notas = obter_notas()

salvar_dados(nome, sobrenome, turma, lista_presença, nota_participação, notas)

def obter_notas():
quantidade_notas = int(input('Quantas notas serão calculadas?: '))
notas = []
for contador in range(quantidade_notas):
while True:
entrada = input(f'Nota do #{contador + 1}: ')
try:
nota = float(entrada)
notas.append(nota)
break
except ValueError:
print('Erro em processar o valor. Insira um número válido')

return notas

def obter_presença():
quantidade_aulas = int(input('Digite quantas aulas houveram: '))
lista_presença = []

for contador in range(quantidade_aulas):
while True:
entrada = input(f'Presença na aula #{contador +1} (True/False): ')
if entrada in ['True', 'False']:
lista_presença.append(eval(entrada))
break
else:
print('Informação inválida. Insira apenas True ou False')

return lista_presença

def salvar_dados(nome, sobrenome, turma, lista_presença, nota_participação, notas):
chave = (nome, sobrenome)
dataset[chave] = {
"Turma": turma,
"Notas": notas,
"Presença": lista_presença,
"Participação": nota_participação
}
print(f'Os dados da aluna {nome} {sobrenome} foram inseridos com sucesso.')

def consultar_lista_alunas():
pass
#TODO - Implentar a função

if dataset:
print('Lista de todas as alunas')
for chave in dataset.keys():
print(f'Nome: {chave[0]} {chave[1]}')
Comment on lines +97 to +98

Copy link
Copy Markdown
Collaborator

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:

Suggested change
for chave in dataset.keys():
print(f'Nome: {chave[0]} {chave[1]}')
for nome, sobrenome in dataset.keys():
print(f'Nome: {nome} {sobrenome}')

else:
print('Não há novos cadastros')

def consultar_faltas_aluna():
pass
#TODO - Implentar a função

nome = input('Informe o primeiro nome da aluna: ').title()
sobrenome = input('Informe o sobrenome da aluna: ').title()
chave = (nome, sobrenome)
if chave in dataset:
faltas = dataset[chave]["Presença"].count(False)
print(f'A aluna {nome} {sobrenome} está com {faltas} faltas')
else:
print('Aluna não encontrada.')

def consultar_notas_aluna():
pass
#TODO - Implentar a função

nome = input('Informe o primeiro nome da aluna: ').title()
sobrenome = input('Informe o sobrenome da aluna: ').title()
chave = (nome, sobrenome)
if chave in dataset:
notas = dataset[chave]["Notas"]
print(f'A aluna {nome} {sobrenome} está com as notas: {notas}')
else:
print('Aluna não encontrada.')

def consultar_status_aprovacao():
pass
#TODO - Implentar a função

nome = input('Insira o primeiro nome da aluna: ').title()
sobrenome = input('Insira o sobrenome da aluna: ').title()
chave = (nome, sobrenome)
if chave in dataset:
dados = dataset[chave]
media_notas = sum(dados["Notas"]) / len(dados["Notas"])
presença = dados["Presença"].count(True) / len(dados["Presença"])
participação = dados["Participação"]

if media_notas >= 6 and presença >= 0.8 and participação > 6:
status = 'Aprovada'
else:
status = 'Reprovada'
print(f'A aluna {nome} {sobrenome} está {status} com média final: {media_notas:.2f}')
else:
print('Aluna não encontrada')
Comment on lines +123 to +138

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ótima implementação do sistema, cuidado com o nome das variáveis para utilizar nomes que sejam mais intuitivos, por exemplo: "dados" poderia ser "dados_aluna", quando for refletir sobre o nome, nós pensamos se o nome em si responde o que ela carrega.

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.

Parabéns pelo trabalho ♥


main()
main()