Escreva um programa para encontrar datas de nascimento até um determinado ano no mesmo dia em que você nasceu. Deixe a entrada ter o formato: AAAA-MM-DD

Exemplos:

Input: 1996-11-12
Output: ['1996-11-12', '2002-11-12', '2013-11-12', '2019-11-12', '2024-11-12', '2030-11-12', '2041-11-12', '2047-11-12']

Entrada: 1992-11-2
Resultado: ['1992-11-2', '1998-11-2', '2009-11-2', '2015-11-2', '2020-11-2', '2026-11-2', '2037-11-2', '2043-11-2', '2048-11-2']

Recomendado: por favor, tente sua abordagem no {IDE} primeiro, antes de prosseguir para a solução.

Funções criadas:



  • split_date (birthdate): Esta função divide a data fornecida pelo usuário em ano, mês e dia.
  • get_birthday (birthdate): Esta função é usada para retornar o dia da semana em que o usuário nasceu.
  • true_birthdays (birthdate): Esta função é usada para retornar uma lista de datas com o mesmo dia da semana em que o usuário nasceu.

Ajudar-nos-á encontrar a data de nascimento do mesmo dia em que o utilizador nasceu acima de três métodos. Em primeiro lugar, o usuário irá inserir a data e a split_date()função irá dividir a data em ano, mês e dia. Em seguida, a função get_birthday()será usada para encontrar o dia da semana para essa data específica. Por fim, a true_birthdays()função será usada para encontrar a lista de todas as datas do mesmo dia da semana. Dentro desta função, um loop for iterará do ano de nascimento a um ano específico e verificará se a data de nascimento em qualquer ano específico tem o mesmo dia da semana ou não. Se o dia da semana for o mesmo, essa data será adicionada à lista de datas.

Abaixo está a implementação.

import datetime 
import calendar 
  
weekdays = ["Monday", "Tuesday", "Wednesday"
           "Thursday", "Friday", "Saturday", "Sunday"] 
     
  
def split_date(birthday): 
  
    
    year, month, day = birthday.split('-')     
    return year, month, day 
      
  
def get_birthday(birthday): 
  
    year, month, day = split_date(birthday) 
  
    
    bdate = datetime.datetime(int(year), int(month), int(day)) 
  
    
    weekday = bdate.weekday() 
  
    
    day = weekdays[weekday] 
  
    return day    
  
  
def listToString(x): 
  
    
    String = " " 
  
    
    return (String.join(x)) 
  
  
def true_birthdays(birthdate): 
    year, month, day = split_date(birthdate) 
  
    
    year = birthdate[:4].split('-') 
  
    
    year = listToString(year) 
  
    
    d_day = get_birthday(birthdate)  
  
    
    
    true_BD = []  
      
    j = 0
  
    for i in range(int(year), 2050): 
        new_year = int(year)+
        new_birthday = str(str(new_year)+"-"+month+"-"+day)  
        new_d_day = get_birthday(new_birthday) 
      if d_day == new_d_day:  
            true_BD.append(new_birthday) 
        else: 
            pass
        j += 1
  
    return true_BD 
  
  
def main(): 
  
    
    birthdate = "1996-11-12"
  
    
    dates = true_birthdays(birthdate)   
      
    print(dates) 
      
  
main() 

Resultado:

['1996-11-12', '2002-11-12', '2013-11-12', '2019-11-12', '2024-11-12', '2030-11-12', ' 2041-11-12 ',' 2047-11-12 ']