Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

rocks

Verificar ano escolaridade

Mensagens Recomendadas

rocks    0
rocks

Boa noite,

Eu tenho um protejo com o objectivo  de verificar em que ano de escola se encontra uma determinada pessoa depois de dizer a data de nascimento e dia actual 

o ano lectivo começa a 15 de Setembro 

Sei que o código que tenho funciona mas ha certos casos em que da o ano de escola da mal(porque o codigo o faz dar) , mas nao tou a conseguir resolver, ou seja nao consigo chegar a parte lógica de como o fazer para o passar para código

#Entrada
nome = str(input("Insira o Nome:"))
#data atual

print("Data actual")
dia = int(input("Dia actual :"))
mes = int(input("Mes actual:"))
ano = int(input("Ano actual:"))
#Data nasc
print("Data da nascimento ")
dia_nasc = int(input("Dia Nascimento:"))
mes_nasc = int(input("Mes Nascimento:"))
ano_nasc = int(input("Ano Nascimento:"))

idade = ano-ano_nasc


#verificação idade 
if(mes > mes_nasc):
    idade = idade
elif (mes == mes_nasc):
    if(dia >= dia_nasc):
        idade = idade
    else:
        idade = idade-1
elif(mes < mes_nasc):
    idade = idade-1

#verificacao ano esc 
classe = 0
cont = 6

#idade 6
if (idade==cont):
    if(mes < 9 ):
        classe = classe 
    elif(mes == 9 ):
        if(dia < 15):
            classe = classe
        else:
            classe = classe + 1
    elif(mes > 9):
        classe = classe + 1
        
#Idade 7
        
cont = cont + 1
if (idade==cont):
    if(mes < 9 ):
        classe = classe +1
    elif(mes == 9 ):
        if(dia < 15):
            classe = classe + 1
        else:
            classe = classe + 2
    elif(mes > 9):
        classe = classe + 2
        
#Idade 8
        
cont = cont + 1
if (idade==cont):
    if(mes < 9 ):
        classe = classe +2
    elif(mes == 9 ):
        if(dia < 15):
            classe = classe+2
        else:
            classe = classe + 3
    elif(mes > 9 ):
        classe = classe + 3

#Idade 9

cont = cont + 1
if (idade==cont):
    if(mes < 9 ):
        classe = classe + 3
    elif(mes == 9 ):
        if(dia < 15):
            classe = classe + 3
        else:
            classe = classe + 4
    elif(mes > 9 ):
        classe = classe + 4

#Idade 10
cont = cont + 1
if (idade==cont):
    if(mes < 9 ):
        classe = classe + 4
    elif(mes == 9 ):
        if(dia < 15):
            classe = classe + 4
        else:
            classe = classe + 5
    elif(mes > 9 ):
        classe = classe + 5
        
#Idade 11
cont = cont + 1
if (idade==cont):
    if(mes < 9 ):
        classe = classe + 5
    elif(mes == 9 ):
        if(dia < 15):
            classe = classe + 5
        else:
            classe = classe + 6
    elif(mes > 9 ):
        classe = classe + 6
        
#Idade 12
cont = cont + 1
if (idade==cont):
    if(mes < 9 ):
        classe = classe + 6
    elif(mes == 9 ):
        if(dia < 15):
            classe = classe + 6
        else:
            classe = classe + 7
    elif(mes > 9 ):
        classe = classe + 7
        
#Idade 13
cont = cont + 1
if (idade==cont):
    if(mes < 9 ):
        classe = classe + 7
    elif(mes == 9 ):
        if(dia < 15):
            classe = classe + 7
        else:
            classe = classe + 8
    elif(mes > 9 ):
        classe = classe + 8
        
#Idade 14
cont = cont + 1
if (idade==cont):
    if(mes < 9 ):
        classe = classe + 8
    elif(mes == 9 ):
        if(dia < 15):
            classe = classe + 8
        else:
            classe = classe + 9
    elif(mes > 9 ):
        classe = classe + 9
        
#Idade 15
cont = cont + 1
if (idade==cont):
    if(mes < 9 ):
        classe = classe + 9
    elif(mes == 9 ):
        if(dia < 15):
            classe = classe + 9
        else:
            classe = classe + 10
    elif(mes > 9 ):
        classe = classe + 10
        
#Idade 16
cont = cont + 1
if (idade==cont):
    if(mes < 9 ):
        classe = classe + 10
    elif(mes == 9 ):
        if(dia < 15):
            classe = classe + 10
        else:
            classe = classe + 11
    elif(mes > 9 ):
        classe = classe + 11
        
#Idade 17
cont = cont + 1
if (idade==cont):
    if(mes < 9 ):
        classe = classe + 11
    elif(mes == 9 ):
        if(dia < 15):
            classe = classe + 11
        else:
            classe = classe + 12
    elif(mes > 9 ):
        classe = classe + 12
        
#Idade 18
cont = cont + 1
if (idade==cont):
    if(mes < 9 ):
        classe = classe + 12
    elif(mes == 9 ):
        if(dia < 15):
            classe = classe + 12
        else:
            classe = classe + 13
    elif(mes > 9 ):
        classe = classe + 13

#Output
if (classe == 1):
    print("O %s tem %d anos e está no %dºano"%(nome,idade,classe))
if(classe<13 and classe>1):
    print("O %s tem %d anos e se nunca chumbou está no %dºano"%(nome,idade,classe))
if(idade<6 or classe ==0):
    print("O %s tem %d anos e ainda não está na escola"%(nome,idade))
if(classe>12 or idade >18):
    print("O %s tem %d anos e ja saiu da escola"%(nome,idade))

Obrigado  

Editado por rocks

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rocks    0
rocks

Outra Forma que tive a tentar foi 

if(mes_nasc > 9):
    classe = idade -6
elif (mes_nasc == 9):
    if(dia_nasc >= 15):
        classe = idade -6
    else:
        classe = idade -5
elif(mes_nasc < 9):
    classe = idade -5

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedropregueiro    5
pedropregueiro

Olá @rocks, antes de mais há algumas coisas básicas no teu código que podes melhorar só para melhorar a legibilidade:

1. podes substituires as ínumeras repetições que tens desta lógica por 1 loop apenas:

#idade 6
if (idade==cont):
    if(mes < 9 ):
        classe = classe 
    elif(mes == 9 ):
        if(dia < 15):
            classe = classe
        else:
            classe = classe + 1
    elif(mes > 9):
        classe = classe + 1

 

2. Podes ainda melhorar a lógica dentro desse mesmo bloco, visto que as variáveis "dia" e "mes" nao variam desde que são inicializadas.

3. A tua lógica no final da aplicação também pode ser melhorada. Parece-me que há casos em que imprime 2 frases diferentes no fim, o que imagino não deveria ser possível.

De qualquer forma, em relação ao teu problema em concreto, podes explicar melhor em que situações não estás a receber os resultados esperados?

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31    600
thoga31

Não é necessário um ciclo nem contabilizar ano a ano. Pode ser feito com mera matemática. Deixo o exemplo (fiz de cabeça, mas acho que dá o resultado correcto):

idade = ano - anon - (1 if (mes < mesn) or ((mesn == mes) and (dia < dian)) else 0)
escola = idade - 5 - (1 if (mes < 9) or ((mes == 9) and (dia < 15)) else 0)

print("Idade = {0}".format(idade))
print("Ano de escolaridade se nunca chumbou = {0}".format(escola if (escola <= 12) and (escola > 0) else "ainda não está na escola" if (escola <= 0) else "Já saiu da escola"))

 

Editado por thoga31
  • Voto 1

Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.