Comunidad CientoSeis > Tecnología

Programacion

Navegación

(1/5) > >>

raul_isl:
Hola y bienvenidos todos a un nuevo tutorial de "Soy idiota y me gusta complicarme la vida".
Estoy intentando aprender programacion. He hecho un curso de logica de programacion, y mas o menos todo bien, pero en el ejercicio final, he visto como lo han creado, y no entiendo muy bien como funciona una cosa, y estoy dandome de cabezazos para intentar comprenderlo.
La cosa es un ejercicio de como hacer un cajero automatico, con su login, conteo de saldo y demas. Es Python

--- Código: ---usuarioEnBD = "neo"
claveEnBD = "1234"
sesion = False
saldo = 100000
iniciar = True
def validarUsuario(usuario, clave) :
   global sesion
   if (usuario == usuarioEnBD and clave == claveEnBD) :
     sesion = True
     return True
   return False
def login() :
   global sesion
   if (sesion) :
     return True
   usuario = input("Digite usuario: ")
   clave = input("Digite contraseña: ")
   return validarUsuario(usuario, clave)
# def retirar(valor) :
#    global saldo
#    if (valor > saldo) :
#      return False, saldo
#    saldo = saldo - valor
#    return True, saldo
# def depositar(valor) :
#    global saldo
#    saldo = saldo + valor
#    return True, saldo
# def consultarSaldo() :
#    return True, saldo
# def accion(opcion) :
#    if (opcion == 1) :
#      valor = int(input("Digite el valor a consignar: "))
#      return depositar(valor)
 
#    if (opcion == 2) :
#      valor = int(input("Digite el valor a retirar: "))
#      return retirar(valor)
#    if (opcion == 3) :
#      return consultarSaldo()
 
#    return False, saldo
def ejecutar() :
   if not login() :
     print("usuario o contraseña inválido")
     return
   print("¿Qué desea hacer?")
   opcion = int(input("1 => Consignar, 2 => Retirar y 3 => Consultar saldo: "))
 
#    ok, saldo = accion(opcion)
#    if not ok :
#      print("No se realizó la acción, saldo:", saldo)
#    else:
#      print("Acción realizada correctamente, saldo:", saldo)
print("Bienvenido")
while (iniciar == True) :
   ejecutar()
   respuesta = input("¿Deseas realizar otra operación? (SI => s, si y NO => valor diferete de s, si): ")
   if (respuesta == "s" or respuesta == "si" or respuesta == "S" or respuesta == "SI") :
     iniciar = True
   else:
     iniciar = False
     print("Gracias por utilizar los servicios...")
     
--- Fin del código ---
Mas o menos pillo como funciona todo, menos el login. He indentado todo menos las funciones que he visto que afectan al login propiamente dicho, pero no consigo aclararme muy bien como lo hace. Lo que no entiendo es la parte de
def login() :
   global sesion
   if (sesion) :
     return True
   usuario = input("Digite usuario: ")
   clave = input("Digite contraseña: ")
   return validarUsuario(usuario, clave)
Si sesion esta declarada como False al inicio del codigo, estas diciendo que si sesion devuelve True, entonces pida el usuario y contraseña.
No le encuentro el sentido, deberia hacer la peticion si sesion fuese False, y no True
A menos que, al estar a la izquierda del if, ese return funcione como un else, y ese se ejecute asi solo en caso contrario de lo que pide return.

Orestes:
Si llamaras una segunda vez a login(), sesion ya estará a true y se saltará pedir de nuevo los datos y llamar a validarUsuario(). Al meter un return en mitad de la función dentro de un condicional, si entra en el condicional la función termina ahí.

Paradox:
Un poco guarro pero sirve.

Lo que está haciendo es "si existe sesión sal de la función con un VERDADERO".
En caso contrario hace el resto de la función que básicamente es pedir user/pass y luego devolver el resultado de la función de validación del password, que será FALSO si la contraseña es incorrecta y VERDADERO en el caso de que sea correcto (como en el primer if de la función).

Orestes:
El equivalente más claro sería

--- Código: ---   if (!sesion) :
     usuario = input("Digite usuario: ")
     clave = input("Digite contraseña: ")
     return validarUsuario(usuario, clave)
   else :
     return true
--- Fin del código ---

Ni idea de programar python así que no sé si está bien escrito

Paradox:
Exacto, tal y cómo lo escribe Orestes es probablemente lo que haríamos en un lenguaje más "humano".

En el caso del código inicial es una forma de hacer un atajo dentro de la función en plan "si se cumple esa condición, sal con ese resultado" de modo que te ahorras usar elses, ya que no hace falta, porque el flujo del programa ya se ha cortado y por lo tanto no pasará por esas sentencias.

En el modo que lo ha escrito Orestes (negando la condición y usando el else) probablemente se entiende mejor.

Navegación

[0] Índice de Mensajes

[9] Índice del Foro

[#] Página Siguiente

Ir a la versión completa