Hola a todos.
Bienvenidos y muchas gracias por visitar el Blog, este espacio está construído para todo aquel que quiera incursionar al mundo de la programación en el lenguaje PYTHON y más adelante convertir todos estos ejercicio a JAVA. Si el material consultado ha sido de tu interés y ha ayudado a tu trabajo o actividad, ayudame a seguir creciendo el blog con ejercicios interesantes.
También puedes suscribirte a mi canal de Youtube: youtube.com/c/SneyderRamírez se mostrará el funcionamiento de los códigos.
NOTA: Antes de que utilices los códigos, verifica la versión PYTHON que vayas a utilizar, para no presentar problemas de compatibilidad.
EJERCICIO: VALIDAR USUARIO Y CONTRASEÑA EN PYTHON.
He encontrado un ejercicio que me ha llamado la atención en esta incursión que he hecho para este lenguaje de programación, y lo he obtenido del siguiente enlace:
validador.py
Lee todo el desarrollo del ejercicio y después descarga los 3 códigos:
usuario.py
passw.py
validador.py
Adicionalmente puedes revisar otras soluciones de este ejercicio, en este mismo blog:
2da forma: CLASES
3ra forma: Python-PyQT
4 forma: Recursividad ( Muy pronto)
1. MÓDULO USUARIO.(usuario)
1.1 El nombre de usuario debe contener un mínimo de 6 caracteres y un máximo de 12.
1.2 El nombre de usuario debe ser alfanumérico.
1.3 Nombre de usuario con menos de 6 caracteres, retorna el mensaje "El nombre de usuario debe contener al menos 6 caracteres".
1.4 Nombre de usuario con más de 12 caracteres, retorna el mensaje "El nombre de usuario no puede contener más de 12 caracteres".
1.5 Nombre de usuario con caracteres distintos a los alfanuméricos, retorna el mensaje "El nombre de usuario puede contener solo letras y números".
1.6 Nombre de usuario válido, retorna True.
Solución Módulo usuario.
usuario.py
def nickname(nombre_usuario): long=len(nombre_usuario) #Calcular la longitud del nomre de usuario y=nombre_usuario.isalnum() #Calcula que la cadena contenga valores alfanuméricos if y== False: # La cadena contiene valores no alfanuméricos print("El nombre de usuario puede contener solo letras y números") if long < 6: print("El nombre de usuario debe contener al menos 6 caracteres") if long > 12: print("El nombre de usuario no puede contener más de 12 caracteres") if long >5 and long <13 and y ==True: return True #Verdadero si el tamaño es mayor a 5 y menor a 13
2. MÓDULO PASSWORD.(passw)
Crear un módulo para validación de contraseñas. Dicho módulo, deberá cumplir con los siguientes criterios de aceptación:2.1 La contraseña debe contener un mínimo de 8 caracteres.
2.2 Una contraseña debe contener letras minúsculas, mayúsculas, números y al menos 1 carácter no alfanumérico.
2.3 La contraseña no puede contener espacios en blanco.
2.4 Contraseña válida, retorna True.
2.5 Contraseña no válida, retorna el mensaje "La contraseña elegida no es segura".
Solución módulo password.
passw.py
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | def clave(password): validar=False #que se vayan cumpliendo los requisitos uno a uno. long=len(password) #Calcula la longitud de la contraseña espacio=False #variable para identificar espacios mayuscula=False #variable para identificar letras mayúsculas minuscula=False #variable para contar identificar letras minúsculas numeros=False #variable para identificar números y=password.isalnum()#si es alfanumérica retona True correcto=True #verifica que hayan mayuscula, minuscula, numeros y no alfanuméricos for carac in password: #ciclo for que recorre caracter por caracter en la contraseña if carac.isspace()==True: #Saber si el caracter es un espacio espacio=True #si encuentra un espacio se cambia el valor user if carac.isupper()== True: #saber si hay mayuscula mayuscula=True #acumulador o contador de mayusculas if carac.islower()== True: #saber si hay minúsculas minuscula=True #acumulador o contador de minúsculas if carac.isdigit()== True: #saber si hay números numeros=True #acumulador o contador de numeros if espacio==True: #hay espacios en blanco print("La contraseña no puede contener espacios") else: validar=True #se cumple el primer requisito que no hayan espacios if long <8 and validar==True: print("Mínimo 8 caracteres") validar=False #cambia a Flase si no se cumple el requisito móinimo de caracteres if mayuscula == True and minuscula ==True and numeros == True and y== False and validar ==True: validar = True #Cumple el requisito de tener mayuscula, minuscula, numeros y no alfanuméricos else: correcto=False #uno o mas requisitos de mayuscula, minuscula, numeros y no alfanuméricos no se cumple if validar == True and correcto==False: print("La contraseña elegida no es segura: debe contener letras minúsculas, mayúsculas, números y al menos 1 carácter no alfanumérico") if validar == True and correcto ==True: return True |
3. MÓDULO VALIDADOR.(validador)
Crear un módulo que solicite al usuario el ingreso de un nombre de usuario y contraseña y que los valide utilizando los módulos generados en los dos ejercicios anteriores.
Solución módulo validador.Solución módulo validador.
validador.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import usuario import passw correcto=False while correcto==False: nombre=input("Ingrese nombre de usuario: ") if usuario.nickname(nombre) == True: print("Usuario creado exitosamente") correcto=True while correcto==True: contrasenia=input("Ingrese su Password: ") if passw.clave(contrasenia)==True: print("Contraseña creada exitosamente") correcto=False |
PRUEBA DEL FUNCIONAMIENTO: En mi canal de Youtube podrás ver otros ejercicios realizados.
Hay muchos métodos para realizar este ejercicio, este fue el mio, espero sea claro y si queda alguno con dudas en este desarrollo con gusto las responderé O si tienes otra forma de hacerlo y la quieres compartir se recibe con gusto.
Recuerden: "La mayoría de los buenos programadores programan, no porque
esperan que se les pague o por adulación por parte del público, sino
porque es divertido programar."
- Linus Torvalds
- Linus Torvalds
Éxitos!!!
Que onda me puede dar un video para explicar!!!
ResponderBorrarQue onda me puede dar un video para explicar!!!
ResponderBorrarHola, tengo unos problemas con el micrófono por eso no he realizado el video. Pero si tiene alguna duda que pueda solucionar con mucho gusto.
Borraramigo copio tu codigo de contraseña y al momento de compilar con mis otros dos modulos me sale error solo el modulo para verificar contraseña.
Borrarcreo que es por la version que tu tienes yo tengo la 2.7 me podrias ayudar porfavor......
muchas gracias de ante mano
Hola, muchas gracias por visitar el blog. A mi no me genera error. De pronto ocurría algo cuando copiaba y pegaba el archivo al editor de texto, de todas maneras le hice un ajuste al ejercicio y lo reduje, ya que había código innecesario. Prueba esta nueva versión y nos cuentas.
ResponderBorrarHasta pronto
hola disculpa a un primo le dejaron esto
ResponderBorrarDiseñar y codificar un programa en python donde se valide un password de una correo electronico con los siguientes criterios:
1. debe ser mayor o igual 8 caracteres
2.debe contener al menos una mayuscula
3.debe tener uno de estos caracteres !#$%&?+-*/
5.naturalmente debe tener minusculas
si el password cuenta con los puntos anteriores es valido,
sino el programa dira por que razones no lo es.
es parecido al codigo pero al momento de correr tu codigo marca error en validador ImportError: No module named 'usuario' si no es molestia nos puedes ayudar :)
El error que genera de "ImportError: No module named 'usuario' ", es por que debe crear el archivo usuario, que es el que verifica que las condiciones de usuario se cumplan. El código que busca es similar a este sólo falta agregar un compararador de cadenas para identificar esos caracteres "!#$%&?+-*/" . Para eso usaría un for por ejemplo:
Borrarcont=0
for caracter in password:
if caracter in '!#$%&?+-*/':
cont=cont+1
hola buenas tardes disculpa en tu codigo me marca que paasword no esta definido lo trato de definir y me marca error :/
ResponderBorrarHola, tiene que guardar el tercer archivo con nombre password
BorrarHola, aporto mi granito de arena, yo creé dos clases validator, para el user y el pass, dentro del directorio modules:
ResponderBorrarclass UserValidator():
errors = []
def check_size(self, username):
if len(username) < 6:
self.errors.append('El nombre de usuario debe contener al menos 6 caracteres')
return False
elif len(username) > 12:
self.errors.append('El nombre de usuario no puede contener más de 12 caracteres')
return False
else:
return True
def check_alfa(self, username):
if not username.isalnum():
self.errors.append('El nombre de usuario puede contener sólo letras y números')
return False
else:
return True
def validate(self, username):
is_valid = self.check_size(username) and self.check_alfa(username)
return is_valid
y la clase que valida los passwords:
# -*- coding: utf-8 -*-
class PassValidator():
errors = []
def check_size(self, password):
if len(password) < 8:
self.errors.append('La contraseña debe tener al menos 8 caracteres')
return False
else:
return True
def check_mayusculas(self, password):
if password.islower():
self.errors.append('La contraseña debe tener al menos una mayúscula')
return False
else:
return True
def check_minusculas(self, password):
if password.isupper():
self.errors.append('La contraseña debe tener al menos una minúscula')
return False
else:
return True
def check_numeros(self, password):
have_num = False
for letter in password:
if letter.isdigit():
have_num = True
if not have_num:
self.errors.append('La contraseña debe contener al menos un número')
return have_num
def check_alfanumerico(self, password):
if password.isalnum():
self.errors.append('La contraseña debe tener al menos un caracter no alfanumérico')
return False
else:
return True
def check_spaces(self, password):
if password.count(' ') > 0:
self.errors.append('La contraseña no puede contener espacios en blanco')
return False
else:
return True
def validate(self, password):
size = self.check_size(password)
mayusculas = self.check_mayusculas(password)
minusculas = self.check_minusculas(password)
numeros = self.check_numeros(password)
alfanumerico = self.check_alfanumerico(password)
spaces = self.check_spaces(password)
return size and mayusculas and minusculas and numeros and alfanumerico and spaces
Luego las utilizo en login,py:
# -*- coding: utf-8 -*-
import modules.validators.user_validator as uv
import modules.validators.pass_validator as pv
user_validator = uv.UserValidator()
pass_validator = pv.PassValidator()
nombre = raw_input('Ingrese su nombre de usuario: ')
passwd = raw_input('Ingrese su contraseña: ')
if not user_validator.validate(nombre):
for error in user_validator.errors:
print error
if not pass_validator.validate(passwd):
for error in pass_validator.errors:
print error
cualquier sugerencia o corrección es bienvenida!.
Saludos!
Sergio Gabriel Rodriguez
Corrientes - Argentina
Hola, muchas gracias Sergio por visitar el Blog y compartir conocimientos. Es un valioso aporte para seguir creciendo este Blog, haré otra entrada explicando este código
Borrarde nada! muy bueno tu blog, estoy iniciandome en Python y me gustaría compartir conocimientos entre todos, un abrazo.
BorrarSergio
hola, me ayudó mucho ojalá pudiera regresarte el apoyo.
ResponderBorrarMás granitos de arena ...
ResponderBorrar#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import string
validador = string.letters + string.digits + "ñÑ_/*-+!#$%&?¿@"
validador = validador.decode('utf8')
while True:
bandera = True # Varible que controla la validez de la contraseña
vcd, vcu, vcl, vca = 0, 0, 0, 0 # Variables contadoras: vcd->dígitos, vcu->mayúsculas, vcl->minúsculas, vca->caracteres especiales
contrasenia = raw_input("Inserte contraseña de usuario: ") # Solicitar contraseña por pantalla
contrasenia = contrasenia.decode('utf8') # Codificar la entrada en UTF-8
len_contrasenia = len(contrasenia) # Longitud de la cadena de entrada
# Validador por caracter de la contraseña
for carac in contrasenia:
bandera = (bandera) and (carac in validador) # Si es un caracter válido excluyendo el espacio
vcd += carac.isdigit() * 1 # Incrementa en uno si es un dígito
vcu += carac.isupper() * 1 # Incrementa en uno si es una letra mayúscula
vcl += carac.islower() * 1 # Incrementa en uno si es una letra minúscula
vca += (carac in "/_*-+!#$%&?¿@".decode('utf8')) * 1 # Incrementa en uno si es un caracter especial
if not bandera:
print "\nError: Caracteres no validos ...\nCaracteres válidos: " + validador +"\n"
continue
if not len_contrasenia >= 8:
print "\nLongitud de contraseña errónea. Debe ser mayor a 8 caracteres ...\n"
continue
bandera = (bandera * vcd * vcu * vcl * vca) > 0
if not bandera:
print "\nError: La contraseña debe tener al menos 1 numero, una letra minúscula, una letra mayúscula y un caracter especial ...\n"
continue
break
if bandera:
print "Contraseña válida".upper()
Muchas gracias, haré otra entrada explicando su código.
Borrarque fue lo que importaste en "string"
BorrarBuenas tardes paso a dejarte mi resolucion a lo mismo usando recursividad
ResponderBorrarUsuario:
def validarUsuario(usuario):
usuario = input("Ingrese el nombre de usuario: ")
if not(usuario.isalnum()):
print ("El nombre del usuario puede contener solo letras y numeros")
validarUsuario(usuario)
elif len(usuario)<6:
print ("El nombre de usuario tiene que tener minimo 6 caracteres")
validarUsuario(usuario)
elif len(usuario)>12:
print ("El nombre de usuario tiene que tener menos de 12 caracteres")
validarUsuario(usuario)
return True
usuario = " "
validarUsuario(usuario)
Contraseña:
def validarContra(contra):
contra = input("Ingrese la contraseña: ")
longuitud = len(contra)
tieneMay = False
tieneMin = False
tieneNum = False
tieneEsp = False
tieneCar = False
if ((contra.isalnum()==False) and (longuitud>=8)):
for c in contra:
if c.isupper()==True:
tieneMay=True
if c.islower()==True:
tieneMin=True
if c.isdigit()==True:
tieneNum=True
if c==" ":
tieneEsp=True
if (tieneMay and tieneMin and tieneNum and (not(tieneEsp))):
print ("La contraseña introducida cumple con los requisitos")
return True
else:
print ("La contraseña no cumple con los requisitos")
validarContra(contra)
contra= " "
validarContra(contra)
Muchas gracias por tu aporte!, haré otra entrada explicando este código para otros usuarios.
BorrarHola!! buenas noches me podrían explicar como se hace una validación mediante tokens de una dirección IP
ResponderBorrarcon regular expression en python.
Hola mi amigo lo estoy tratando de usar para validar correos electronicos muchas gracias
ResponderBorrarBuenas man, no hace falta poner if x == True:
ResponderBorrar...
Si la funcion se cumple, se ejecuta lo que este debajo.
If x:
...
Salutes.
Y como pregunta, ¿estos archivos de validación los puedo poner al querer entrar en una página web?
ResponderBorrarMe explico, tengo un código que me permite hacer ver en una página web lo que captura una pi-camera, y querría saber si se puede y cómo se puede pedir validación al entrar en esa página.
Gracias de antemano
por favor me pueden ayudar con el codigo de como crear una contraseña en dev c++ si por favor
ResponderBorraralguien puede pasar el modulo 2 y 3 a c++
ResponderBorrarporfavor
ResponderBorraramigo copio tu codigo de contraseña y al momento de compilar con mis otros dos modulos me sale error solo el modulo para verificar contraseña.
ResponderBorrarcreo que es por la version que tu tienes yo tengo la 2.7 me podrias ayudar porfavor......
muchas gracias de ante mano
Me encantó, me ayudo muchisimo en un proyecto que tengo de python en la universidad... Sigan asi por favor es excelente que hayan personas que quieran ayudar a los demás
ResponderBorrarHola soy nuevo en el mundo de la programación, inexperto total seguí tu código pero me genera este error "C:\Users\User\PycharmProjects\user_and_pass\venv\Scripts\python.exe C:/Users/User/PycharmProjects/user_and_pass/validador.py
ResponderBorrarIngrese nombre de usuario:elber1234
Traceback (most recent call last):
File "C:/Users/User/PycharmProjects/user_and_pass/validador.py", line 6, in
nombre = input("Ingrese nombre de usuario:")
File "", line 1, in
NameError: name 'elber1234' is not defined
Process finished with exit code 1"
Gracias, funciona a la perfección, lo corrí en el editor IDLE de Python 3.9, pero cuando lo ejecuto en Sublimetext3, se queda colgado en, Ingrese nombre de usuario:,debo estar omitiendo algo en Sublimetext3?
ResponderBorrarCuando ejecuto un programa, pero a pesar de estar bien escrito el código, genera error, simplemente abro un archivo nuevo en python3, lo guardo con su extensión py y luego lo ejecutó y zas corre perfectamente. Muy a pesar que lo escribo en el editor de Sublime Text 3.
ResponderBorrarHola, como puedo acomodar para generar un ususario y contraseña especifico y que si es errada me tire error? gracias
ResponderBorrarPor ejemplo un numero de 5 cifras
hola como hago para que la contraseña no contenga un numero repetido. gracias
ResponderBorrarEste es mi codigo:
ResponderBorrardef password():
contraseña=input("Introduzca contraseña: ")
longitud=len(contraseña)
mayusculas=False
minusculas=False
caracterEspecial=False
espacio=False
if contraseña.isalnum()==False and longitud>=8:
for caracter in contraseña:
if caracter.isupper()==True:
mayusculas=True
if caracter.islower()==True:
minusculas=True
if caracter.isalnum()==True:
caracterEspecial=True
if " " in caracter:
espacio=True
if mayusculas==True and minusculas==True and caracterEspecial==True and espacio==False:
print("Contraseña correcta")
else:
print("La contraseña elegida no es segura, debe contener al menos 8 caracteres, letras minúsculas, mayúsculas, números, al menos 1 carácter no alfanumérico y no contener espacios.")
password()
me pueden ayudar por favor ,soy nueva con este tipo de programa
ResponderBorrarRealizar los siguientes ejercicios con funciones:
# * Crear un diccionario donde se almacene el usuario y la clave.
# * Pedir el ingreso por teclado de usuario y clave.
# * Validar que lo ingresado sea igual a los datos del diccionario, de lo contrario mostrará un error de inicio de sesión. El usuario solo tiene un máximo de 3 intentos fallidos, al superarlos termina el programa.
# * Cuando el inicio de sesión es correcto, pasa un menú de dos opciones:
# 1. Convertir fecha en texto.
# 2. Calcular tiempo de nacido.
# * En la primera opción, solicitar por teclado una fecha en formato "11/02/2022", crear una función que devuelva lo siguiente "Viernes, 11 de febrero de 2022".
# * La segunda opción, solicitar la fecha de nacimiento, crear una función que devuelva los años, meses y días de nacido (edad).