Así que estoy tratando de hacer un aviso de inicio de sesión y quiero que imprima 'Éxito' solo si no hay errores. Este es el código que estoy usando:
if not is_email(email) or not is_name(name) or password != confirmPassword or not is_secure(password): if not is_email(email): print('Not a valid email') if not is_name(name): print('Not a valid name') if password != confirmPassword: print('Passwords don\'t match') if not is_secure(password): print('Password is not secure') else: print('Success')¿Habría alguna forma de acortar este código? Quiero que muestre todos los errores a la vez, así que no estoy usando elif.
Una forma de evitar repetir las pruebas:
ok = True if not is_email(email): print('Not a valid email') ok = False if not is_name(name): print('Not a valid name') ok = False if password != confirmPassword: print('Passwords don\'t match') ok = False if not is_secure(password): print('Password is not secure') ok = False if ok: print('Success')No es más breve, pero es claro y evita las comparaciones adicionales, por lo que es más rápido y menos derrochador.
Una forma es usar una bandera:
has_errors = False if not is_email(email): print(...) has_errors = True ... if not has_errors: print("Success!")¿Qué tal esto?
flags = [is_email(email), is_name(name), password != confirmPassword, is_secure(password)] prints = ['Not a valid email', 'Not a valid name', 'Passwords don\'t match', 'Password is not secure'] for index in range(len(flags)): if flags[index] == False: print(prints[index])Otro enfoque: acumule los errores en una lista, y luego puede verificar la veracidad de la lista de errores en lugar de volver a verificar todas las condiciones de error. Esto también le evita tener que mantener otra parte del estado y tener otra línea de código en cada bloque if para actualizarlo.
errors = [] if not is_email(email): errors.append('Not a valid email') if not is_name(name): errors.append('Not a valid name') if password != confirmPassword: errors.append('Passwords don\'t match') if not is_secure(password): errors.append('Password is not secure') print("\n".join(errors or ["Success"]))