Mensajes: 155
Temas: 57
Registro en: Jan 2018
Reputación:
0
Hola, ¿cómo están? -
Dejo un pequeño código, el más conciso que encontré para validar fecha ingresada por teclado, parece funcionar bien, lo único que no puedo realizar es que imprima la fecha de esta manera 18/01/1952 y no 1952/01/18, tal vez sea algo sencillo pero no sé ni como poner en Google. -
Código: from datetime import datetime
while True:
try:
fecha_str = input('\n Ingrese fecha ==> ejemplo "18/01/1952"...: ')
fecha = datetime.strptime(fecha_str, '%d/%m/%Y')
break
except:
print("\n No ha ingresado una fecha correcta...")
print("\n ", fecha)
Saludos.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Mensajes: 74
Temas: 12
Registro en: Aug 2017
Reputación:
4
22-01-2018, 07:41 PM
(Última modificación: 22-01-2018, 07:49 PM por calvicius.)
hola,
de la Página Oficial de Python
Código: >>> from datetime import date
>>> fecha = date(1987, 1, 22)
>>> print(fecha)
1987-01-22
>>> print(fecha.year)
1987
...
etc.
El formato de la calse date es datetime.date(year, month, day).
En esa pagina tienes, para darle formato, y un monton de metodos mas
Mensajes: 155
Temas: 57
Registro en: Jan 2018
Reputación:
0
Hola.-
Muchas gracias calvicius me fue muy útil tu post, dejo el código y si lo desean, me digas(digan) en que puedo mejorarlo.-
Código: def ing_fecha():
tMes = ("", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio",
"Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre", )
tDia = ("Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado")
while True:
try:
fecha_str = input('\n Ingrese fecha "dd/mm/aaaa"...: ')
fecha = datetime.strptime(fecha_str, '%d/%m/%Y')
break
except:
print("\n No ha ingresado una fecha correcta...")
mes = tMes[fecha.month]
dia_semana = datetime.isoweekday(fecha)
dia = tDia[dia_semana]
fecha_completa = dia + " " + str(fecha.day) + " de " + tMes[fecha.month] + " de " + str(fecha.year)
return fecha_completa
Saludos.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Mensajes: 74
Temas: 12
Registro en: Aug 2017
Reputación:
4
ya que veo que tienes tiempo y ganas. Lo siguiente es solo por si te interesa.
A la hora de concatenar variables con constantes, tu usas lo mas fácil:
cadena_final = "la suma final, " + suma + "procede de " + a + " mas " + b
puede resultar mejor usar el método format. Lo puedes examinar aqui:
https://pyformat.info/
Cuando usas listas/tuplas fijas (dias de semana, sexo, etc...) quizas te interese usar la libreria enum. Aquí:
https://docs.python.org/3/library/enum.html
el esquema es una especie de lista, donde cada elemento es un par clave-valor. Esto en C se usa bastante, y produce un objeto sobre el que puedes iterar.
saludos.
Mensajes: 155
Temas: 57
Registro en: Jan 2018
Reputación:
0
Hola, calvicies. -
Cita:ya que veo que tienes tiempo y ganas......
No pude parar de reír al leer esto, por favor dime como llegaste a esa conclusión. -
Con respecto a tus sugerencias, las voy a tener muy en cuenta. -
Saludos.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Mensajes: 74
Temas: 12
Registro en: Aug 2017
Reputación:
4
23-01-2018, 06:14 PM
Mensajes: 1.300
Temas: 3
Registro en: Feb 2016
Reputación:
71
23-01-2018, 06:15 PM
(Última modificación: 23-01-2018, 06:20 PM por Francisco.)
Hola Daniel, gracias por el código. Yo por mi parte insisto en siempre tener en claro qué excepción quiero capturar y cuál es la línea que potencialmente la origina.
Código: while True:
try:
fecha_str = input('
Ingrese fecha "dd/mm/aaaa"...: ')
fecha = datetime.strptime(fecha_str, '%d/%m/%Y')
break
except:
print("
No ha ingresado una fecha correcta...")
Lo que ocurre con este código es que cualquier excepción originada en las líneas 3-5 hará que el programa diga "No se ha ingresado una fecha correcta" (por ejemplo, la excepción KeyboardInterrupt si el usuario presiona CTRL + C para terminar el programa). Eso se soluciona fácilmente indicando qué excepción esperamos. Sabemos que strptime() lanza ValueError si el formato de la fecha indicada no es correcto.
Código: while True:
try:
fecha_str = input('
Ingrese fecha "dd/mm/aaaa"...: ')
fecha = datetime.strptime(fecha_str, '%d/%m/%Y')
break
except ValueError:
print("
No ha ingresado una fecha correcta...")
Pero también sabemos que la línea que lanza el error es la número 4, así que basta con que ella sola esté dentro del bloque try/except.
Código: while True:
fecha_str = input('
Ingrese fecha "dd/mm/aaaa"...: ')
try:
fecha = datetime.strptime(fecha_str, '%d/%m/%Y')
except ValueError:
print("
No ha ingresado una fecha correcta...")
else:
break
A propósito de la recomendación de calvicius sobre la formación de cadenas de caracteres te invito a que leas este artículo sobre el tema!
(23-01-2018, 03:52 PM)calvicius escribió: puede resultar mejor usar el método format. Lo puedes examinar aqui:
https://pyformat.info/
Buen material!
Saludos!
Mensajes: 155
Temas: 57
Registro en: Jan 2018
Reputación:
0
Hola, ¿cómo están?
calvicius, totalmente de acuerdo hoy con 66 años estoy no menos de 10 horas diarias frente
a la compu y 9.30 dedicada a python. -
Francisco es la segunda vez que me haces notar mi error con respecto a las excepciones, lo voy
a tener muy en cuenta, de hecho, ya modifique el código. -
Por último, esa es la manera como quedo, ¿es correcto?
Código: fecha_completa = f"{dia} {fecha.day} de {tMes[fecha.month]} de {fecha.year}"
Un abrazo y gracias por el tiempo.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Mensajes: 1.300
Temas: 3
Registro en: Feb 2016
Reputación:
71
Perfecto Daniel! Un saludo.
|