Estrutura de Decisão - Duvidas

59 views
Skip to first unread message

Jose Marinho

unread,
Apr 29, 2022, 1:35:53 PM4/29/22
to Python Brasil
Ola a todos

Estou fazendo um exercicio do Wiki Python de Estrutura De Decisao, eu consegui resolver da forma mais simples o exercicio, porém sempre procuro da uma robustada no sistema, incluindo mais variáveis e definições e tals

Fui aplicar pra ver se a data estaria correto ou falso conforme a solicitação do exercicio, mas como tem ano bissexto e é em fevereiro, queria validar isso qnd alguem colocar por ex 29/02/2022 (retornar "Dia Errado") e qnd der 29/02/2020 (retornar "Dia Correto").

Abaixo segue o exercicio e meu algoritmo logo em seguida:

    # 18. Faça um Programa que peça uma data no formato dd/mm/aaaa e determine
    # se a mesma é uma data válida.
   
    class Exer_18:
      def __init__(self):
        self.coletar_dados()
        self.calcular_dados()
   
      def coletar_dados(self):
        self.data_input = str(input('Informe a Data: '))
   
      def calcular_dados(self):
        # instancinado input da data
        data = self.data_input
        # separando dia, mes e ano da str
        data = data.split('/')
   
        # Conferir se os dados estão
        if len(data[0]) == 2 and len(data[1]) == 2 and len(data[2]) == 4 :
          # transformar dados str em int
          data[0] = int(data[0])
          data[1] = int(data[1])
          data[2] = int(data[2])
   
          # instanciar datas nas variaveis, para facilitar no algoritmo
          dia = data[0]
          mes = data[1]
          ano = data[2]
   
          mes_31 = [1, 3, 5, 7, 8, 10, 12]
          mes_29 = 2
   
          # Confere se o é bissexto ou não
          if ano % 100 != 0 and ano % 4 == 0 or ano % 400 == 0:
            bissexto = True
          else:
            bissexto = False
         
          # Confere se a data inserida é correto
          if dia > 0 and dia < 29:
            print('Dia Correto')
   
          # Conferencia de excessoes
   
          # elif dia == 28 and mes == mes_28:
          #   print('Dia Correto')
   
          elif dia == 29 and bissexto is True:
            print('Dia Correto')
          elif dia == 31:
            for data in mes_31:
              if mes == data:
                print('Dia Correto')
          elif dia >= 28 and dia < 31:
            print('Dia Correto')
          else:
            print('Dia Errado')
           
          # Confere se o mes inserido é correto
          if mes > 0 and mes < 13:
            print('Mes Correto')
          else:
            print('Mes Errado')
   
          # ano atual (dava pra automatizar, mas veremos dps)
          ano_atual = 2022
   
          # Confere se o ano inserido é correto
          if ano > 0 and ano <= ano_atual:
            print('Ano Correto')
          else:
            print('Ano Errado')
       
        else:
          print('Dia, Mês ou Ano Errado')
   
    Exer_18()


  [1]: https://wiki.python.org.br/ListaDeExercicios

O problema e que não to entendendo como devo estruturar algoritmo pra validar sobre o ano bissexto, pq não esta dando certo, tentei refatorar linha por linha e so me deu nó na cabeça, então, passo esse desafio a vocês pra me ajudar com esse ponto.

          #Conferencia de excessoes
   
          # elif dia == 28 and mes == mes_28:
          #   print('Dia Correto')
   
          elif dia == 29 and bissexto is True:
            print('Dia Correto')
          elif dia == 31:
            for data in mes_31:
              if mes == data:
                print('Dia Correto')
          elif dia >= 28 and dia < 31:
            print('Dia Correto')
          else:
            print('Dia Errado')

O algoritmo me retorna assim

    Informe a Data: 29/02/2022   <- input
    Dia Correto
    Mes Correto
    Ano Correto
    <__main__.Exer_18 at 0x7fe36cf8ae50>

Agradeço a atenção de todos.

fabiano silva

unread,
May 7, 2022, 2:03:31 PM5/7/22
to python...@googlegroups.com
A resposta esta no exercicio do quanabara do curso em video

--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/python-brasil/3fdec218-f8d4-43aa-aedd-79736d1893d6n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages