lunes, 9 de julio de 2018

Convertir segundos en Python

Reto: Convertir segundos

Dados un cierto número se segundos expresarlos como días, horas, minutos y segundos.




Solicitamos al usuario o bien obtenemos de forma aleatoria un número de segundos totales hasta un valor máximo de dos millones. El objetivo consiste en convertirlos a un formato que nos diga cuantos días, horas, minutos y segundos contienen. Por ejemplo, 2.000.000 segundos equivalen a 23 días, 3 horas, 33 minutos y 20 segundos. Podemos ver seguidamente los cálculos en Excel.



Hemos utilizado la función int que calcula la división entera y la función mod que calcula el módulo, resto o resíduo de la división.

Método 1

En Python los cálculos son los mismos. Para hacer la división entera se usa la expresión numerador//denominador y para hacer el módulo se usa la expresión numerador%denominador, lo cual nos da el resto. También tenemso que saber que un día tiene 86.400 segundos, una hora tiene 3.600 segundos y un minuto tiene 60 segundos. Hemos tenido que usar dos variables auxiliares denominadas resto1 y resto2. Hubiera surgido también la variable resto3 pero esta no ha sido necesaria ya que finalmente este concepto coincide con el número de segundos s que quedan al final.

print('Un minuto tiene',60,'segundos')
print('Una hora tiene',60*60,'segundos')
print('Un día tiene',60*60*24,'segundos')
print('_'*28+'\n')
while True:
  x =int(input('Número de segundos: ') or 2000000)
  if x>2000000:
    print("Introduzca un valor hasta dos millones.")
  else:
    break
d=x//86400
resto1=x%86400
h=resto1//3600
resto2=resto1%3600
m=resto2//60
s=resto2%60
print( '%d días, %d horas, %d minutos, %d segundos' % \
  (d, h, m, s)))


Método 2

Con este método los segundos iniciales se obtienen de forma aleatoria hasta un máximo de dos millones. Para ir calculando la división entera y el resto hemos usaso una función que viene definida internamente en Python que se llama divmod. Esta función utiliza como argumentos el numerador y el denominador y devuelve dos valores numéricos, el primero es la división exacta y el segundo el resto. Hemos necesitado al igual que en el caso anterior dos variables auxiliares para recoger el retos1 (r1) y el resto2 (r2).

import random
x=random.randint(1,2000000)
print(x,'segundos =')
d, r1 = divmod(x, 86400)
h, r2 = divmod(r1, 3600)
m, s = divmod(r2, 60)
print(d,'días',h,'horas',m,'minutos',s,'segundos')


1 comentario:

  1. segundos = 220352


    print(f"{segundos//86400} Días")
    print(f"{(segundos%86400)//3600} Horas")
    print(f"{(segundos%3600)//60} Minutos")
    print(f"{segundos%60} Segundos ")

    ResponderEliminar