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

Dállia Sintique - entrega Projeto Guiado-I #35

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

DalliaSintique
Copy link

Entrega do Projeto Guiado- I, semana 5.
Criado sistema de consulta de informações Aluna, arquivos sistema_alunas.py e README.md salvos no diretório Dallia_Sintique.
Profª Mayumi.


def obtem_nome(pergunta):
while True:
entrada_usuário = str(input(pergunta)).lstrip().rstrip()
Copy link
Collaborator

Choose a reason for hiding this comment

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

  1. Quando utilizamos o input, já estamos recebendo uma string, assim, não precisamos utilizar uma conversão de dados str :)
  2. Para não precisar utilizar um lstrip e um rstrip, podemos usar o strip, e ele já remove os espaços no início e final da string

Sugestão:

Suggested change
entrada_usuário = str(input(pergunta)).lstrip().rstrip()
entrada_usuário = input(pergunta).strip()

Copy link
Collaborator

@mayumisngk mayumisngk left a comment

Choose a reason for hiding this comment

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

Oi Dállia!

Fiz uma revisão de código (code review) para você e espero que você possa revisar seu projeto e colocar posteriormente mais coisas. Vi que você testou bem seu código e o desenvolvimento ficou bem legal. Futuramente, se quiser complementar mais o sistema, você pode pensar em encapsular as funcionalidades de aprovação, dando mais especifidade a função e dando responsabilidades únicas para ela.

No demais, esse foi um dos melhores projetos, parabéns pelo trabalho!
Boa sorte e sucesso na sua jornada! ♥


return codigo_opcao

def obtem_nome(pergunta):
Copy link
Collaborator

Choose a reason for hiding this comment

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

Ótimo uso de funções para encapsular a funcionalidade de obter nome e sobrenome de aluna e tratar o dado :)

while True:
entrada_usuário = str(input(pergunta)).lstrip().rstrip()
if entrada_usuário.replace(" ", "").isalpha() and entrada_usuário != "":
break
Copy link
Collaborator

Choose a reason for hiding this comment

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

Ao invés de dar break, podemos retornar o entrada_usuário já neste ponto :)

Sugestão:

Suggested change
break
return entrada_usuário

Comment on lines +34 to +35
status = 0
while status == 0:
Copy link
Collaborator

Choose a reason for hiding this comment

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

Como a condição de saída já está dentro do bloco, podemos colocar o return no ponto que queremos. Assim, não necessitamos utilizar uma variável de controle.

Sugestão:

Suggested change
status = 0
while status == 0:
while True:

else:
nota = float(input(f"Digite a nota de participação da aluna) (0 a 10): "))
if nota >= 0 and nota <= 10:
status = 1
Copy link
Collaborator

Choose a reason for hiding this comment

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

Como comentei, ao invés de colocar status 1 aqui, podemos apenas dar o return da função aqui.

Sugestão:

Suggested change
status = 1
return nota

status = 1
else:
print("Digite uma nota válida entre 0 e 10")
except:
Copy link
Collaborator

Choose a reason for hiding this comment

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

Como estamos utilizando valores, podemos especificar a except:

Sugestão:

Suggested change
except:
except ValueError:


while True:
turma = (input ('Informe a turma da aluna com A / B ou C: ')).strip().upper()
if turma == "A" or turma == "B" or turma == 'C':
Copy link
Collaborator

Choose a reason for hiding this comment

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

Aqui temos uma condicional de uma mesma variável validando para mais de um valor, podemos incluí-lo em uma lista :)

Sugestão:

Suggested change
if turma == "A" or turma == "B" or turma == 'C':
if turma in ['A', 'B', 'C']:


def consultar_lista_alunas():
print(' Segue a lista de alunas cadastradas ')
if len(dataset) != 0:
Copy link
Collaborator

Choose a reason for hiding this comment

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

Podemos simplificar a validação utilizando a própria coleção.

Sugestão:

Suggested change
if len(dataset) != 0:
if dataset:

Comment on lines +100 to +101
for nome in dataset.keys():
print(nome[0])
Copy link
Collaborator

Choose a reason for hiding this comment

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

Apenas para curiosidade, podemos desempacotar a tupla dando nome aos respectivos campos, assim não precisariamos usar o índice da tupla :)

Sugestão:

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

Comment on lines +123 to +126
conte_nota = 0
for nota in notas_aluna:
conte_nota += 1
print(f' A nota {conte_nota} da aluna {nome_completo[0]} é: {nota}')
Copy link
Collaborator

Choose a reason for hiding this comment

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

A função for já enumera sozinho, para recuperar o valor, é só utilizar o enumerate. Assim, não precisamos utilizar o contador e deixamos o código mais limpo.

Sugestão:

Suggested change
conte_nota = 0
for nota in notas_aluna:
conte_nota += 1
print(f' A nota {conte_nota} da aluna {nome_completo[0]} é: {nota}')
for i, nota in enumerate(notas_aluna, start=1):
print(f'A nota {i} da aluna {nome_completo[0]} é: {nota}')

Comment on lines +132 to +155
def consultar_status_aprovacao():
try:
nome_completo = tuple(obtem_nome('Informe o nome completo da aluna: ').title().split())

notas_aluna = dataset[nome_completo]['Notas']
media_aluna = round(sum(notas_aluna)/len(notas_aluna),1)


presença_aluna = dataset[nome_completo]['Presença']
numero_presenca = presença_aluna.count(True)
porcentagem_presenca = round((numero_presenca/len(presença_aluna)) *100)

nota_participação = dataset[nome_completo]['Participação']

if media_aluna >=6 and porcentagem_presenca >= 80 and nota_participação >=6:
print(f' Aluna aprovada. \n Média Final: {media_aluna}')
elif media_aluna <6:
print(f' Aluna Reprovada por média inferior a 6.0 \n Média Final Obtida: {media_aluna}')
elif nota_participação < 6:
print(f' Aluna Reprovada por nota de participação inferior a 6.0 \n Nota de participação obtida: {nota_participação}. \n Média Final: {media_aluna} ')
else:
print(f' Aluna Reprovada por presença inferior a 80%.\n A presença da aluna foi de {porcentagem_presenca}% \n Média Final: {media_aluna}')
except KeyError:
print("Não localizado. Por favor informe o nome completo de uma aluna")
Copy link
Collaborator

Choose a reason for hiding this comment

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

Boa implementação do cálculo de aprovação, cuidado com as quebras de linhas adicionais e foi muito legal você ter adicionado uma mensagem pra cada tipo de reprovação. No geral, foi tudo bem testado. Parabéns pelo trabalho! :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants