11 proyectos en Python - Biografía

Tras tener que aprender a manejar ficheros y rompernos la cabeza para contar las palabras que contenía uno de ellos, llega un proyecto engañosamente sencillo: deberemos preguntar al usuario por determinada información personal, comprobando que los datos sean válidos y posteriormente, deberemos imprimir en pantalla un resumen con los mismos.

La dificultad aquí se encuentra en la validación de los datos, pues si bien podríamos hacer que si no se introduce una cadena se imprima un mensaje de error, * sería una cadena de caracteres pero no válida como nombre. 

Empecemos por lo sencillo: pedir a los usuarios sus datos e imprimirlos por pantalla.

nombre = input("Introduzca su nombre: ")
nacimiento = input("Introduzca su fecha de nacimiento: ")
direccion = input("Introduzca su dirección: ")
objetivos = input("Introduzca sus objetivos personales: ")


print("Nombre: " + nombre)
print("Fecha de nacimiento: " + nacimiento)
print("Dirección: " + direccion)
print("Objetivos personales: " + objetivos)

 

Esto era lo fácil. Vayamos a la validación de datos. Para el nombre, iba a usar el programa de contar palabras del proyecto anterior, de tal forma que si el nombre introducido tenía una sola palabra, se tomara por incorrecto, puesto que, menos Cher o Sting, todo el mundo tiene un nombre y un apellido. Además, dudo mucho que las superestrellas de la canción pierdan el tiempo leyendo este post. Sin embargo, hay una forma más sencilla, importando la librería "re", usaremos una expresión regular para que solo se permitan letras y espacios.

nombre = input("Introduce tu nombre: ")
while (not re.fullmatch(r"[A-Za-z ]{5,30}", nombre)):
nombre = input("\nDemasiados car. (max 30) o car. invalido, introdúzcalo: ")

 

Para la fecha de nacimiento he encontrado la libreria Datetime que permite manejar fechas sin tener que descomponer la entrada ni implementar el código que la valide, así que es lo que usaremos.

fe = True
while fe:
try:
fecha = input("Ingresa tu fecha de nacimiento en el formato YYYY-MM-DD: ")
datetime.strptime(fecha, '%Y-%m-%d')
fe= False
except ValueError:
print("Fecha inválida")

 

Con la dirección haremos algo más sencillo, comprobando que la calle sea una cadena de caracteres, con el mismo código que usamos para el nombre, y que el número de la casa un entero. 


calle = input("Introduce tu calle: ")
while (not re.fullmatch(r"[A-Za-z ]{2,30}", calle)):
calle = input("\nDemasiados car. (max 30) o car. invalido, introdúcela: ")

 

Los objetivos es lo más sencillo de todo, pues solo comprobaremos que el usuario escriba una cadena de caracteres. Si su único objetivo en la vida es escribir "^" yo no soy nadie para llevarle la contraria.

El código al completo quedaría de la siguiente forma: 

from datetime import datetime
import re

nombre = input("Introduce tu nombre: ")
while (not re.fullmatch(r"[A-Za-z ]{5,30}", nombre)):
nombre = input("\nDemasiados car. (max 30) o car. invalido, introduzcalo otra vez: ")


fe = True
while fe:
try:
fecha = input("Ingresa tu fecha de nacimiento en el formato YYYY-MM-DD: ")
datetime.strptime(fecha, '%Y-%m-%d')
fe= False
except ValueError:
print("Fecha inválida")


calle = input("Introduce tu calle: ")
while (not re.fullmatch(r"[A-Za-z ]{2,30}", calle)):
calle = input("\nDemasiados car. (max 30) o car. invalido, introdúcela de nuevo: ")


num = True
while num:
numero = input("Introduzca el número de su casa: ")
try:
numero = int(numero)
num = False
except ValueError:
print("Entrada incorrecta.")


objetivos = input("Introduzca sus objetivos personales: ")
print("")
print("Nombre: " + nombre)
print("Fecha de nacimiento: " + fecha)
print("Dirección: " + calle + " "+ str(numero))
print("Objetivos personales: " + objetivos)

 

Lo que parecía algo trivial al principio, vemos que no lo era tanto, obligándonos a investigar las librerías de Python y las expresiones regulares.

Compartir:
spacer

No hay comentarios:

Publicar un comentario

Comenta lo que quieras