Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Problema con ejercicio de PYthon !!Ayuda
#1
Sad 
###Realice un programa para un club. El mismo debera permitir la carga de los socios (finalizando cuando se ingresa "Ultimo").La informacion de cada socio es numero,nombre,fecha de nacimiento,dni,categoria(simple,pleno) y fecha de ingreso.Estos datos deberan almacenarse en una lista.Luego debera imprimir por pantalla todas los socios con mas de treinta años de antiguedad y que hayan nacido antes del 28 de julio de 1960 para conocer a todos los socios vitalicios.Acontinuacion,se deberan listar los socios cuyo nombre comienza con "J"###
 
"Haber si pueden ayudarme este ejercicio no me da y no le encuentro la vuelta a la fecha de nacimiento no me lo toma en la otra función."

import time
def obtener_categoria():
categoria=raw_input("ingrese su categoria simple o pleno: ")
while categoria not in ("simple" , "pleno"):
categoria=raw_input("ingrese solo simple o pleno: ")
return categoria

def carga_datos():
socios=[]
nom=raw_input("Ingrese el nombre del socio o ultimo para terminar: ")
while nom!="ultimo":
numero=input("Ingrese el numero del socios: ")
fecha_n=raw_input("Ingrese fecha de nacimiento dd/mm/aaaa): ")
Dni=input("Ingrese su Dni: ")
categoria=obtener_categoria()
fecha_in=raw_input("Ingrese su fecha de ingresos: ")
socios.append([nom,numero,fecha_n,Dni,categoria,fecha_in])
nom=raw_input("Ingrese el nombre del socio o ultimo para terminar: ")
return socios

def calcularEdad(fecha):
fecha = fecha.split("/");
fechaActual = (time.strftime("%d/%m/%Y")).split("/");
edad = int(fechaActual[2]) - int(fecha[2])

if fecha[1]==fechaActual[1]:
if fecha[0]>fechaActual[1]:
edad=edad-1
if fecha[1]>fechaActual[1]:
edad=edad-1
return edad

def imprimir_antiguedad(socios):
print "nombre\t\tnumero\t\Fecha de nacimiento\tDNI\tCategoria\tIngreso"
print "-------------------------------------------------------------"
for s in socios:
fechaIn = s[5].split("/")
print calcularEdad(s[2])
if calcularEdad(s[2])>30 and (int(fechaIn[0])<28 and int(fechaIn[1])<7 and int(fechaIn[2])<1960):
print s[0] + "\t" + str(s[1]) + "\t"+ str(s[2])+ "\t" + str(s[3])+ "\t" + s[4]+ "\t" + str(s[5])

if s[0][0]=="j":
print s[0]


s=carga_datos()
imprimir_antiguedad(s)
Responder
#2
Hola, creo que tu problema radica en el correcto manejo de las fechas. Te recomiendo que uses el módulo estándar datetime. Para obtener una instancia de la clase datetime.datetime a partir de una cadena puedes usar la función datetime.strptime():

  1. from datetime import datetime
  2. # ...
  3. fecha_n = datetime.strptime(raw_input("Ingrese fecha de nacimiento dd/mm/aaaa): "), "%d/%m/%Y")


Luego crea otra instancia de la fecha límite para poder compararla:

  1. limit = datetime(day=28, month=7, year=1960)


Usando los operadores >, <, >=, etc., puedes determinar si la fecha es anterior o posterior al 28/07/1960:

  1. if fecha_n < limit:
  2. # Nació antes.
  3. else:
  4. # Nació después.


Saludos.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)