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.
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.
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.
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.
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!
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.
Perfecto Daniel! Un saludo.