jonhhy Posted July 22, 2022 at 12:04 PM Report Share #626541 Posted July 22, 2022 at 12:04 PM (edited) Olá Malta, por favor, gostava de otimizar/melhorar uma instrução que fosse possível de viabilizar algo tipo isto: while (date.today() < ano[c]): ano[C] = int(input('Digit the bornYear: ')) ou melhor: while (date.today() < ano[C] = int(input('Digit the bornYear: ')) Contexto, Desafio 054 Crie um programa que leia o ano de nascimento de sete pessoas. No final, mostre quantas pessoas ainda não atingiram a maioridade e quantas já são maiores. O objectivo será o utilizador não inserir, logo de imediato, datas inválidas (neste caso, datas futuras ..em anos)) Solução apresentada: from datetime import date adults = 0 childs = 0 ano = {} actualYear = date.today().year print(actualYear) for c in range(0,7): ano[c] = int(input('Digit the bornYear: ')) # while (date.today() < ano[c]): # ano[C] = int(input('Digit the bornYear: ')) print(ano[c]) if actualYear - ano[c] >= 18: adults += 1 else:#if actualYear - ano[c]< 0: # garantir que não tem datas futuras... childs += 1 print('Number of Babys: {} \n Number of Adults: {}'.format(childs, adults)) Grato pela atenção. jonhhy Edited July 22, 2022 at 12:04 PM by jonhhy Link to comment Share on other sites More sharing options...
maluco-123 Posted July 25, 2022 at 10:38 AM Report Share #626556 Posted July 25, 2022 at 10:38 AM Viva, A partir do python 3.8, tens o "assignment expression", que funciona mais ou menos como queres ( tipo no C ) https://peps.python.org/pep-0572/ Tem a limitacao de que nao podes usar com subscripts (something[something]), apenas com nomes, fica qualquer coisa assim: # ... while actualYear < (ano_nasc := int(input('Ano sff:'))): # handle bad year print("Ano invalido") ano[C] = ano_nasc # ... Saude (Desculpai-me a falta de pontuacao, estou num teclado ingles) Link to comment Share on other sites More sharing options...
jonhhy Posted July 25, 2022 at 02:23 PM Author Report Share #626558 Posted July 25, 2022 at 02:23 PM Obrigado maluco-123, acabei por fazer desta forma, acrescentei uma ciclo while para verificar se a condição estava satisfeita na primeira leitura (simulação de ciclo do while) from datetime import date adults = 0 tries = childs = 0 ano = {} actualYear = date.today().year print(actualYear) for c in range(0,7): ano[c] = int(input('Digit the bornYear: ')) while ano[c] > actualYear: ano[c] = int(input('Digit the bornYear: ')) tries += 1 # while (date.today() < ano[c]): # ano[C] = int(input('Digit the bornYear: ')) print(ano[c]) if actualYear - ano[c] >= 21: adults += 1 else:#if actualYear - ano[c]< 0: # garantir que não tem datas futuras... childs += 1 print('Number of Babys: {} \n Number of Adults: {}'.format(childs, adults)) Link to comment Share on other sites More sharing options...
jonhhy Posted July 25, 2022 at 03:29 PM Author Report Share #626560 Posted July 25, 2022 at 03:29 PM Em 25/07/2022 às 12:38, maluco-123 disse: Viva, A partir do python 3.8, tens o "assignment expression", que funciona mais ou menos como queres ( tipo no C ) https://peps.python.org/pep-0572/ Tem a limitacao de que nao podes usar com subscripts (something[something]), apenas com nomes, fica qualquer coisa assim: # ... while actualYear < (ano_nasc := int(input('Ano sff:'))): # handle bad year print("Ano invalido") ano[C] = ano_nasc # ... Saude (Desculpai-me a falta de pontuacao, estou num teclado ingles) desta forma aparece-me o erro, apesar de ter atualizado a versão do python: Imagem do erro Link to comment Share on other sites More sharing options...
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