Jump to content

Recommended Posts

Posted

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  

Posted

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
Posted

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?

  • Vote 1
Posted (edited)

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"))
Edited by thoga31
  • Vote 1

Knowledge is free!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.