rocks Posted April 14, 2018 at 08:04 PM Report #610216 Posted April 14, 2018 at 08:04 PM 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
rocks Posted April 15, 2018 at 12:10 AM Author Report #610217 Posted April 15, 2018 at 12:10 AM 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
pedropregueiro Posted April 16, 2018 at 12:32 PM Report #610224 Posted April 16, 2018 at 12:32 PM 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? 1 Report
thoga31 Posted April 17, 2018 at 08:49 PM Report #610254 Posted April 17, 2018 at 08:49 PM (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 April 17, 2018 at 08:49 PM by thoga31 1 Report Knowledge is free!
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now