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():

Código:
from datetime import datetime
# ...
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:

Código:
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:

Código:
if fecha_n < limit:
    # Nació antes.
else:
    # Nació después.

Saludos.
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)