Ayuda con tarea en Python

Iniciado por Angelox1985:., 4 Septiembre 2019, 03:08 AM

0 Miembros y 1 Visitante están viendo este tema.

Angelox1985:.

Estimados(as) de Foro elhacker,

Antes que nada agradecer que me hayan aceptado en su comunidad.
Les cuento soy estudiante de Ingeniería Informática y tengo un ramo de Python al cual me han asignado una tarea de una plantilla python.py con 12 funciones que agregar y mediante eso me piden diversas funciones.
En una de ellas me piden lo siguiente,
- Debo calcular los minutos de vida de una persona, ingresando la fecha actual y fecha de nacimiento en un formato DDMMAAAA sin considerar el/los años bisiestos.

Me debe devolver en el print esto,
print(minutos_vivido(25072017,11101982)) si agrego esa fecha de nacimiento vs la fecha actual, me debe devolver en una tupla minutos vividos, horas y total día.

Las 11 funciones anteriores me costaron pero ya las tengo echas, solo me falta esa.

Y la estructura es así.

def min_vividos(fechanac,fechaact):
" Aquí van las variables y la función"

if __name__ = ' __main__ '

print("Tus minutos vividos son : " ,end="")
print(min:vividos(03092019 , 20111990)

Espero me entiendan,
De antemano ya agradezco sus sugerencias.

EdePC

Saludos,

- Puedes crear objetos DateTime en python a través de una String con ese formato pegado que tienes. Luego hacer la resta entre las DateTime y obtienes un objeto TimeDelta, a partir de este puedes obtener el total de días y convertir esos días a horas y minutos:

Código (python) [Seleccionar]
import datetime

fechanac = datetime.datetime.strptime("11101982", "%d%m%Y")
fechaact = datetime.datetime.strptime("25072017", "%d%m%Y")

delta = fechaact - fechanac

dias_vividas    = delta.days
horas_vividas   = dias_vividas * 24
minutos_vividos = horas_vividas * 60

print(dias_vividas)
print(horas_vividas)
print(minutos_vividos)


- Aunque dependerá del tipo de tarea, algunas veces se pide hacer los cálculos sin utilizar librerías haciéndolo todo a mano, de todas maneras la idea es esa.

- Por cierto, algún conocer de python sabrá porque no muestra nada al hacer un dir(fechanac) o dir(delta) o dir(dias_vividos) ? Tuve que ir a la moustruosa documentación de python para ver los atributos y métodos de datetime y timedelta XD.

tincopasan

 EdePC:
           
Código (python) [Seleccionar]
fechanac = datetime.datetime.strptime("11101982", "%d%m%Y")

Citarno muestra nada al hacer un dir(fechanac)

¿estás seguro que no muestra nada? seguro devuelve una lista con las métodos integrados

ahora si querés más info, ¿has probado con?:

Código (python) [Seleccionar]
help(fechanac)

EdePC

CitarC:\Users\EdSon\Desktop\python-3.7.4-embed-amd64>type ..\vividos.py
import datetime

fechanac = datetime.datetime.strptime("11101982", "%d%m%Y")
fechaact = datetime.datetime.strptime("25072017", "%d%m%Y")

dir(fechanac)
help(fechanac)

delta = fechaact - fechanac

dir(delta)
help(delta)

dias_vividas    = delta.days
horas_vividas   = dias_vividas * 24
minutos_vividos = horas_vividas * 60

dir(dias_vividas)
help(dias_vividas)

print(dias_vividas)
print(horas_vividas)
print(minutos_vividos)

C:\Users\EdSon\Desktop\python-3.7.4-embed-amd64>python ..\vividos.py
Traceback (most recent call last):
  File "..\vividos.py", line 7, in <module>
    help(fechanac)
NameError: name 'help' is not defined

CitarC:\Users\EdSon\Desktop\python-3.7.4-embed-amd64>type ..\vividos.py
import datetime

fechanac = datetime.datetime.strptime("11101982", "%d%m%Y")
fechaact = datetime.datetime.strptime("25072017", "%d%m%Y")

dir(fechanac)
# help(fechanac)

delta = fechaact - fechanac

dir(delta)
# help(delta)

dias_vividas    = delta.days
horas_vividas   = dias_vividas * 24
minutos_vividos = horas_vividas * 60

dir(dias_vividas)
# help(dias_vividas)

print(dias_vividas)
print(horas_vividas)
print(minutos_vividos)

C:\Users\EdSon\Desktop\python-3.7.4-embed-amd64>python ..\vividos.py
12706
304944
18296640

- Jeje, help() funciona si instalo Python, pero dir() únicamente funciona si ejecuto línea a línea en la Python Shell, supongo que solo sirve en depuración y no en archivos ¿?

Citar>>> import datetime
>>> fechanac = datetime.datetime.strptime("11101982", "%d%m%Y")
>>> dir(fechanac)
['__add__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__radd__', '__reduce__', '__reduce_ex__', '__repr__', '__rsub__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', 'astimezone', 'combine', 'ctime', 'date', 'day', 'dst', 'fold', 'fromisoformat', 'fromordinal', 'fromtimestamp', 'hour', 'isocalendar', 'isoformat', 'isoweekday', 'max', 'microsecond', 'min', 'minute', 'month', 'now', 'replace', 'resolution', 'second', 'strftime', 'strptime', 'time', 'timestamp', 'timetuple', 'timetz', 'today', 'toordinal', 'tzinfo', 'tzname', 'utcfromtimestamp', 'utcnow', 'utcoffset', 'utctimetuple', 'weekday', 'year']
>>>

Angelox1985:.

#4
Estimados,

Muchas gracias por responder a mi duda.
Pero resulta que mi profesora pide que no se realice el programa con las librerías del tiempo, sino más bien con el "while", "if" o "for" (Ya que estamos viendo recursiones y recursividad) , es por ello que he buscado información en foros y webs sobre ello sin éxito.
Es por ello que me ha tocado difícil de crear el código para la ejecución del programa.

Y debido a ello acudo a Ustedes como última opción.

Saludos Cordiales.

tincopasan

#5
CitarPero resulta que mi profesora pide que no se realice el programa con las librerías del tiempo, sino más bien con el "while", "if" o "for" (Ya que estamos viendo recursiones y recursividad)
bueno , ¿y qué has intentando?


EdePC:

con print debería funcionar aún desde un archivo

Código (python) [Seleccionar]
print(dir(dias_vividas))
print(help(dias_vividas))


CitarJeje, help() funciona si instalo Python

esta parte no la entiendo, ¿cómo ejecutas el script sin python?

EdePC

- Ya decía yo que la tarea se tenía que hacer a mano, sin embargo la metodología ya la tienes, para darte una ayuda adicional tienes el siguiente código que calcula los días vividos, revísalo junto con el código anterior para obtener las horas y minutos vividos:

Código (python) [Seleccionar]
fec_nac = "11101982"
fec_act = "25072017"

yea_nac = fec_nac[4:]  # => 1982
mon_nac = fec_nac[2:4] # => 10
day_nac = fec_nac[:2]  # => 11

yea_act = fec_act[4:]  # => 2017
mon_act = fec_act[2:4] # => 07
day_act = fec_act[:2]  # => 25

yea_dif = int(yea_act) - int(yea_nac) # => 35
mon_dif = int(mon_act) - int(mon_nac) # => -3
day_dif = int(day_act) - int(day_nac) # => 14

day_viv = (yea_dif * 365) + (mon_dif * 30) + day_dif

print(day_viv) # => 12699


- Ya es cosa tuya adaptarlo a los requerimientos específicos de tu tarea. year = año, month = mes, day = día, fec = fecha, etc, esto se entiende bien creo yo...

---------------------

- Con respecto a mis líos con dir() y help(), pues me había descargado la versión Embed de Python, esa que solo tiene lo necesario para ejecutar .py's (.zip de ~14MB, descomprimido 25MB), no viene con la ayuda, supongo que por esto help() no funcionaba.

- Una vez instalado python ya funciona help() y print(dir(fechanac)) también funciona XD. He estado probando IDEs para python ya que yo voy aprendiendo mientras intento ayudar, estoy viendo que sublime me esta quedando muy corto para esto de java y python, netbeans es algo pesado y tener que crear todo un proyecto para editar y depurar correctamente un simple fichero .java o .py es un lío, luego probé PyCharm, tiene su peso pero es más rápido que netbeans, tiene buen intellisense pero el contraste de sus colores en tema obscuro es horrible.

- Al final me estoy decantando por Visual Studio Code, aunque tiene que descargar Extensiones para trabajar correctamente, funciona bien y es rápido para editar ficheros individuales que es lo que quiero (no "obliga" a crear un proyecto), supongo que como migro de Sublime me siento más cómodo con VSC.