Skip to content
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 #21

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
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
Binary file not shown.
176 changes: 176 additions & 0 deletions exercicios/para-casa/sistema_de_alunas.SamanthaTeng.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
from dataset_alunas import dataset
dataset = {} #Dicionario com escopo global
Copy link
Collaborator

Choose a reason for hiding this comment

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

O dataset já estava importado e com os dados, ao usar essa declaração, estamos colocando um dicionário vazio no lugar do anterior.

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]:
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")
except ValueError:
print("Entrada inválida. Por favor, digite um número inteiro.\n")

return codigo_opcao

def incluir_nova_aluna():
print("Insira os seguintes dados: ")
nome = input("Nome da aluna: ")
sobrenome = input ("Sobrenome: ")
turma = input("Turma da aluna: ")
lista_presenca = obter_presenca()
nota_participacao = float(input("Participação da aluna: "))
notas = obter_notas()
salvar_dados_aluna(nome,sobrenome, turma, notas, lista_presenca, nota_participacao)
return nome


def obter_presenca():
quantidade_aulas = input("Quantidade de aulas: ")
aulas = []

for contador in range(int(quantidade_aulas)):

while True:
entrada = input(f"Insira a presença da aula #{contador + 1}: ")
try:
presenca = eval(entrada)
aulas.append(presenca)
break
except NameError:
print("Entrada inválida. Por favor, insira True ou False.")
Comment on lines +56 to +63
Copy link
Collaborator

Choose a reason for hiding this comment

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

Para evitar erros e simplificar o código, deixo uma nova sugestão:

Suggested change
while True:
entrada = input(f"Insira a presença da aula #{contador + 1}: ")
try:
presenca = eval(entrada)
aulas.append(presenca)
break
except NameError:
print("Entrada inválida. Por favor, insira True ou False.")
while True:
entrada = input(f"Insira a presença da aula #{contador + 1} (True/False): ").strip().lower()
if entrada == 'true':
aulas.append(True)
break
elif entrada == 'false':
aulas.append(False)
break
else:
print("Entrada inválida. Por favor, insira True ou False.")


return aulas

def obter_notas():

quantidade_notas = input("Quantidade de notas: ")
notas = []

for contador in range(int(quantidade_notas)):

while True:
entrada = input(f"Insira a nota #{contador + 1}: ")
try:
nota = float(entrada)
notas.append(nota)
break
except ValueError:
print("Entrada inválida. Por favor, insira um número válido.")


return notas

def salvar_dados_aluna (nome,sobrenome, turma, notas, lista_presenca, nota_participacao):
chave = (nome)
dataset[chave] = {
"Sobrenome": sobrenome,
Comment on lines +87 to +89
Copy link
Collaborator

Choose a reason for hiding this comment

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

O sobrenome deve estar dentro da chave na tupla. Podemos apenas incluir dentro da tupla.

Sugestão:

Suggested change
chave = (nome)
dataset[chave] = {
"Sobrenome": sobrenome,
chave = (nome, sobrenome)
dataset[chave] = {

"Turma": turma,
"Notas": notas,
"Presença": lista_presenca,
"Participação": nota_participacao
}
print ("Aluna foi adicionada no sistema com sucesso!")


def consultar_lista_alunas():
print ("Os nomes inseridos foram:")
for key in dataset.keys():
print(key)

def consultar_faltas_aluna():
nome = input("Insira o nome da aluna: ")
sobrenome = input("Insira o sobrenome da aluna: ")
nome_completo = dataset[nome]['Sobrenome']
if sobrenome != nome_completo:
print("Aluna não encontrada")
return ValueError
nome_completo = nome + ' ' + nome_completo
Comment on lines +106 to +110
Copy link
Collaborator

Choose a reason for hiding this comment

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

Neste ponto, podemos montar a chave da tupla e verificar no dicionário:

Sugestão:

Suggested change
nome_completo = dataset[nome]['Sobrenome']
if sobrenome != nome_completo:
print("Aluna não encontrada")
return ValueError
nome_completo = nome + ' ' + nome_completo
chave = (nome, sobrenome)
if chave in dataset:

faltas = dataset[nome]['Presença']
contador = 0
for f in faltas:
if not f:
contador += 1
faltas = str(contador)
print('nome completo: ' + nome_completo + ' ' + 'quantidade de faltas: ' + faltas)
Comment on lines +107 to +117
Copy link
Collaborator

Choose a reason for hiding this comment

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

Este código está correto, porém a função count da lista tem o mesmo efeito. Para treino e desenvolvimento inicial é interessante, mas posteriormente, podemos explorar as funções existentes para não precisar implementar as coisas do 0.

Sugestão:

Suggested change
if sobrenome != nome_completo:
print("Aluna não encontrada")
return ValueError
nome_completo = nome + ' ' + nome_completo
faltas = dataset[nome]['Presença']
contador = 0
for f in faltas:
if not f:
contador += 1
faltas = str(contador)
print('nome completo: ' + nome_completo + ' ' + 'quantidade de faltas: ' + faltas)
faltas.count(False)


#TODO - Implentar a função

def consultar_notas_aluna():
nome = input("Insira o nome da aluna: ")
sobrenome = input("Insira o sobrenome da aluna: ")
nome_completo = dataset[nome]['Sobrenome']
if sobrenome != nome_completo:
print("Aluna não encontrada")
return ValueError
nome_completo = nome + ' ' + nome_completo
notas = dataset[nome]['Notas']
print('nome completo: ' + nome_completo + ' ' + 'Notas da aluna: ' + str(notas))
#TODO - Implentar a função

def consultar_status_aprovacao():
nome = input("Insira o nome da aluna: ")
sobrenome = input("Insira o sobrenome da aluna: ")
nome_completo = dataset[nome]['Sobrenome']
if sobrenome != nome_completo:
print("Aluna não encontrada")
return ValueError
nota_participação = dataset[nome]['Participação']
nome_completo = nome + ' ' + nome_completo
media = obter_media_ponderada(nome)
resultado_participação = obter_resultado(nome, nota_participação)
print(nome_completo + ' media da aluna: ' + str(media) + ' Status da aprovação: ' + resultado_participação)
Comment on lines +133 to +144
Copy link
Collaborator

Choose a reason for hiding this comment

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

Adorei que você encapsulou as funções pelas funcionalidades. Parabéns Samantha! ♥



def obter_media(nome):
notas = dataset[(nome)]["Notas"] #Recupera a lista com as notas
media = float(sum(notas)/len(notas)) #sum = função do python que soma todos os elementos / len = função que retorna tamanho da lista (quantidade)
return media
#TODO - Implentar a função

def obter_resultado(nome, nota_participacao):

qtd_faltas = dataset[(nome)]["Presença"].count(False) #Count conta a quantidade de vezes que o False aparece na lista
qtd_aulas = len(dataset[(nome)]["Presença"])
percentual_de_faltas = (qtd_faltas / qtd_aulas) * 100

if percentual_de_faltas > 20: #Retorna reprovada para quantidade de faltas maior que 2
return "Reprovada por falta"

if nota_participacao >= 6:
return "Aprovada"
else:
return "Reprovada"
Comment on lines +162 to +165
Copy link
Collaborator

Choose a reason for hiding this comment

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

Neste ponto, estamos levando em consideração apenas a nota de participação no cálculo da aprovação. Devemos levar em consideração a nota normal também.


def obter_media_ponderada(nome):
media_total = obter_media(nome) #Calculo media
peso_media = 0.8 #Coloco o peso das notas
peso_participacao = 0.2 #Coloco o peso de participação
nota_participacao = dataset[(nome)]["Participação"] #Recupero a nota de participação
media_ponderada = (media_total * peso_media + nota_participacao * peso_participacao) / (peso_media + peso_participacao) #Calculo a media ponderada

return media_ponderada

main()
59 changes: 0 additions & 59 deletions exercicios/para-casa/sistema_de_alunas.py

This file was deleted.