Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.60 KB | None | 0 0
  1. import calendar
  2.  
  3. #construtores
  4. def cria_data(dia, mes, ano):
  5.     if (mes in [1, 3, 5, 7, 8, 10, 12] and dia > 31) or \
  6.        (mes in [4, 6, 9, 11] and dia > 30) or \
  7.        (mes > 12):
  8.         raise ValueError("Data invalida!")
  9.     else:
  10.         if (calendar.isleap(ano) and (mes == 2 and dia > 29)) or \
  11.            (not calendar.isleap(ano) and (mes == 2 and dia > 28)):
  12.             raise ValueError("Data invalida!")
  13.     #temos uma data valida
  14.     return {'dia': dia, 'mes': mes, 'ano': ano}
  15.  
  16. #seletores
  17. def data_dia(data):
  18.     return data['dia']
  19.  
  20. def data_mes(data):
  21.     return data['mes']
  22.  
  23. def data_ano(data):
  24.     return data['ano']
  25.  
  26. #transformadores
  27. def escreve_data(data):
  28.     data_string = str(data_dia(data)) + "/" + str(data_mes(data)) + "/" + str(data_ano(data))
  29.     if data_ano(data) < 0:
  30.         print(str(data_dia(data)) + "/" + str(data_mes(data)) + "/" + "0"*(4-len(str(abs(data_ano(data))))) + str(abs(data_ano(data))) + " AC")
  31.     else:
  32.         print(str(data_dia(data)) + "/" + str(data_mes(data)) + "/" + str(data_ano(data)))
  33.  
  34. #reconhecedores
  35. def e_data(data):
  36.     if (not isinstance(data, dict)) or \
  37.        ('dia' not in data) or \
  38.        ('mes' not in data) or \
  39.        ('ano' not in data):
  40.         return False
  41.     if (data_mes(data) in [1, 3, 5, 7, 8, 10, 12] and data_dia(data) > 31) or \
  42.        (data_mes(data) in [4, 6, 9, 11] and data_dia(data) > 30) or \
  43.        (data_mes(data) > 12):
  44.         return False
  45.     else:
  46.         if (calendar.isleap(data_ano(data)) and (data_mes(data) == 2 and data_dia(data) > 29)) or \
  47.            (not calendar.isleap(data_ano(data)) and (data_mes(data) == 2 and data_dia(data) > 28)):
  48.             return False
  49.     return True
  50.  
  51. #testes
  52. def data_anterior(data1, data2):
  53.     if data_ano(data1) > data_ano(data2):
  54.         return False
  55.     elif data_ano(data1) < data_ano(data2):
  56.         return True
  57.     elif data_ano(data1) == data_ano(data2):
  58.         if data_mes(data1) > data_mes(data2):
  59.             return False
  60.         elif data_mes(data1) < data_mes(data2):
  61.             return True
  62.         elif data_mes(data1) == data_mes(data2):
  63.             if data_dia(data1) > data_dia(data2):
  64.                 return False
  65.             elif data_dia(data1) < data_dia(data2):
  66.                 return True
  67.             elif data_dia(data1) == data_dia(data2):
  68.                 return False
  69.            
  70.            
  71. def idade(data_nascimento, data_actual):
  72.     if not data_anterior(data_nascimento, data_actual):
  73.         raise ValueError("Ainda nem nasceu...")
  74.     else:
  75.         return data_ano(data_actual) - data_ano(data_nascimento)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement