Python - Duda ejercicio básico, fechas

 
Vista:

Duda ejercicio básico, fechas

Publicado por Guillermo (1 intervención) el 16/05/2018 13:44:05
Hola buenas, necesito realizar un ejercicio básico de python en el que me piden lo siguiente:
"Crea un programa con Python que te pregunte tu Nombre y Apellidos y tu fecha de cumpleaños.
Con esos datos, sacará un mensaje del tipo:
'Hola, Juan Manuel, tu cumpleaños será dentro de 90 días' "
Mi pregunta es como hacer que los días no salgan negativos si el cumpleaños ya ha sido este año.
Esto es lo que tengo


1
2
3
4
5
6
7
8
9
10
11
12
13
from datetime import datetime
name = input("Introduzca su nombre completo ")
day = int(input("Día en que naci?"))
month = int(input("Mes en que naci?(número)"))
now = datetime.now()
today = now.day
Nowmonth = now.month
 
month = month - Nowmonth
day = day - today
month = month * 30
time = month - day
print ("Hola, %s, tu cumpleaños será dentro de %s dias." % (name, time))
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Lucas
Val: 16
Ha disminuido su posición en 8 puestos en Python (en relación al último mes)
Gráfica de Python

Duda ejercicio básico, fechas

Publicado por Lucas (8 intervenciones) el 16/05/2018 16:53:35
Hola. En esta clase de ejercicios yo lo que suelo hacer es coger lápiz y papel y hacer el algoritmo. De esta manera te das cuenta de errores de los que no te fijas mientras escribes código. Aquí te dejo cómo sería el código. Un saludo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from datetime import datetime
name = input("Introduzca su nombre completo ")
day = int(input("Día en que naci?"))
month = int(input("Mes en que naci?(número)"))
now = datetime.now()
today = now.day
Nowmonth = now.month
 
month = month - Nowmonth
if month>0: #Si el mes es mayor que 0 no va a haber ningún problema
    day = day - today
    month = month * 30
    while day>0: #Si el día es mayor que 0 no hay ningún problema
        time = month - day
    time = month + day #Si el día es negativo, en vez de sumarlo lo va a restar por lo que tenemos que poner + (+-=-)
    print ("Hola, %s, tu cumpleaños será dentro de %s dias." % (name, time))
else:
    month=12+month #Si el mes es negativo significa qué no está dentro de este año por lo que hay que saltarse al año siguiente.
    #A partir de aquí ya todo es normal
    day = day - today
    month = month * 30
    while day>0:
        time = month - day
    time = month + day
    print ("Hola, %s, tu cumpleaños será dentro de %s dias." % (name, time))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lucas
Val: 16
Ha disminuido su posición en 8 puestos en Python (en relación al último mes)
Gráfica de Python

Duda ejercicio básico, fechas

Publicado por Lucas (8 intervenciones) el 16/05/2018 17:33:28
Perdón, me acabo de dar cuenta de un error. Los while son if.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from datetime import datetime
name = input("Introduzca su nombre completo ")
day = int(input("Día en que naci?"))
month = int(input("Mes en que naci?(número)"))
now = datetime.now()
today = now.day
Nowmonth = now.month
 
month = month - Nowmonth
if month>0: #Si el mes es mayor que 0 no va a haber ningún problema
    day = day - today
    month = month * 30
    if day>0: #Si el día es mayor que 0 no hay ningún problema
        time = month - day
    else:
        time = month + day #Si el día es negativo, en vez de sumarlo lo va a restar por lo que tenemos que poner + (+-=-)
    print ("Hola, %s, tu cumpleaños será dentro de %s dias." % (name, time))
else:
    month=12+month #Si el mes es negativo significa qué no está dentro de este año por lo que hay que saltarse al año siguiente.
    #A partir de aquí ya todo es normal
    day = day - today
    month = month * 30
    if day>0:
        time = month - day
    else:
        time = month + day
    print ("Hola, %s, tu cumpleaños será dentro de %s dias." % (name, time))

Al ser while, si el día es mayor a 0 el programa no va a avanzar ya que el valor no cambiará y por lo tanto se quedará atascado en ese bucle.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 1.120
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Duda ejercicio básico, fechas

Publicado por kip (257 intervenciones) el 17/05/2018 16:35:14
Hola, algo sencillo podria ser:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from datetime import datetime
 
name = input("Introduzca su nombre completo ")
day = int(input("Día en que nacio ?"))
month = int(input("Mes en que nacio ?"))
 
today = datetime.today()
birthdateWithActualYear = datetime(today.year + 1, month, day)
 
print(
  'Tu cumpleaños sera dentro de {.days} dias'.format(
    birthdateWithActualYear - today
  )
)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 1.120
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Duda ejercicio básico, fechas

Publicado por kip (257 intervenciones) el 17/05/2018 17:12:27
Hago una corrección al código, sirve solo para fechas anteriores de la fecha entregada, para resolverlo se debe mantener el año actual algo asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from datetime import datetime
 
name = input("Introduzca su nombre completo ")
day = int(input("Día en que nacio ?"))
month = int(input("Mes en que nacio ?"))
 
today = datetime.today()
birthdateWithActualYear = datetime(today.year, month, day)
 
if birthdateWithActualYear < today:
  birthdateWithActualYear = birthdateWithActualYear \
    .replace(year=birthdateWithActualYear.year + 1)
 
print(
  'Tu cumpleaños sera dentro de {.days} dias'.format(
    birthdateWithActualYear - today
  )
)

Se debe tener en cuenta que los días son exclusivos con la fecha actual.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de José María
Val: 819
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Duda ejercicio básico, fechas

Publicado por José María (245 intervenciones) el 16/05/2018 23:41:40
Aquí tienes otra manera.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import datetime
 
nombre = raw_input("Introduzca su nombre completo ")
dia = int(input("Día en que naci?"))
mes = int(input("Mes en que naci?(número)"))
ano = int(input("Año en que naci?(número)"))
 
fecha_nacimiento = datetime.date(ano, mes, dia)
hoy = datetime.date.today()
 
nuevo_ano = ano
while True:
    mi_cumple = datetime.date(nuevo_ano, mes, dia)
    if mi_cumple < hoy:
        nuevo_ano += 1
    else:
        faltan = (mi_cumple - hoy).days
        print "Hola, %s, tu cumpleaños será dentro de %s dias." % (nombre, faltan)
        break
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar