CientoSeis

Comunidad CientoSeis => Tecnología => Mensaje iniciado por: raul_isl en 10 de Abril de 2021, 00:20

Título: Programacion
Publicado por: raul_isl en 10 de Abril de 2021, 00:20
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
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...")
     

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.
Título: Re:Programacion
Publicado por: Orestes en 10 de Abril de 2021, 11:53
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í.
Título: Re:Programacion
Publicado por: Paradox en 10 de Abril de 2021, 11:53
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).
Título: Re:Programacion
Publicado por: Orestes en 10 de Abril de 2021, 11:59
El equivalente más claro sería

   if (!sesion) :
     usuario = input("Digite usuario: ")
     clave = input("Digite contraseña: ")
     return validarUsuario(usuario, clave)
   else :
     return true


Ni idea de programar python así que no sé si está bien escrito
Título: Re:Programacion
Publicado por: Paradox en 10 de Abril de 2021, 12:18
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.
Título: Re:Programacion
Publicado por: raul_isl en 10 de Abril de 2021, 13:02
Vale, mas o menos lo pillo. Gracias :laugh:
Título: Re:Programacion
Publicado por: raul_isl en 10 de Abril de 2021, 20:35
Ahora tengo una pregunta.
Si quisiera hacer una app, que lenguaje deberia aprender?
De Android libre (https://elandroidelibre.elespanol.com/2020/02/como-crear-aplicaciones-para-android-todo-lo-que-necesitas-para-comenzar.html) deduzco que Javascript, pero solo veo tutos de Javascript para front end... y entiendo que eso es solo la parte visual, y no la parte interna. Me equivoco?
Título: Re:Programacion
Publicado por: raul_isl en 11 de Abril de 2021, 01:07
Otra pregunta. Como no os suicidais todos los putos dias?
Llevo como mas de una hora intentando a ver porque no se me ejecuta un puto script, si lo he copiado tal cual el ejemplo que me estaban dando, si voy a la pagina de ejemplo que dan, miro directamente el codigo fuente que funciona, y esta exactamente igual que todo lo que me han dicho que hiciera y yo he repetido pasito por pasito.

Y resulta que me faltaba un puto punto. Un punto. un .

Y el visual studio code se estaba quedando tan pancho, diciendo que todo estaba bien.
Título: Re:Programacion
Publicado por: Orestes en 11 de Abril de 2021, 13:13
Ah, la maravilla de los puntos o puntos y coma perdidos, qué tiempos... Luego te sale automático, te falla el código y vas como un águila, aquí falta.

De todas formas hay puntos y puntos, eh, no es lo mismo olvidarte un punto o punto y coma que tenga que terminar una instrucción o sea parte de la estructura del código que olvidarte un punto decimal en un dato :lol:

Cita de: raul_isl en 10 de Abril de 2021, 20:35
Ahora tengo una pregunta.
Si quisiera hacer una app, que lenguaje deberia aprender?
De Android libre (https://elandroidelibre.elespanol.com/2020/02/como-crear-aplicaciones-para-android-todo-lo-que-necesitas-para-comenzar.html) deduzco que Javascript, pero solo veo tutos de Javascript para front end... y entiendo que eso es solo la parte visual, y no la parte interna. Me equivoco?

De esto ni idea
Título: Re:Programacion
Publicado por: raul_isl en 11 de Abril de 2021, 19:03
Es un punto que para que una.. constante?¿ llamara a una... variable?
    let randomNumber = Math.floor(Math.random() * 100) + 1;
    const guesses = document.querySelector('.guesses');
    const lastResult = document.querySelector('.lastResult');
    const lowOrHi = document.querySelector('.lowOrHi');
    const guessSubmit = document.querySelector('.guessSubmit');
    const guessField = document.querySelector('.guessField');
    let guessCount = 1;
    let resetButton;

Justo el que esta delante del guesses dentro de document.querySelector
Título: Re:Programacion
Publicado por: Faerindel en 12 de Abril de 2021, 02:21
Oh, pero ese punto está dentro de una string. VSCode no te va a hilar tan fino de intentar comprobar lo que le pasas a querySelector() (¿WebStorm quizá? Que por algo es de pago).

Javascript se está usando, por alguna razón más allá de mi comprensión, para hacer mierdas en servidor también.
Título: Re:Programacion
Publicado por: jug0n en 12 de Abril de 2021, 09:45
Nodejs para servidor.

Y añadiría mongodb para la base de datos.
Título: Re:Programacion
Publicado por: Paradox en 12 de Abril de 2021, 13:33
Cita de: raul_isl en 11 de Abril de 2021, 19:03
Es un punto que para que una.. constante?¿ llamara a una... variable?
    let randomNumber = Math.floor(Math.random() * 100) + 1;
... blah...
Este punto es muy importante. No forma parte del nombre de la variable, función, objeto o lo que sea, lo que hace es separar la referencia de un "grupo" de la información dentro de él. Es como un acceso anidado.
Eso te sirve en estructuras tipo tupla para acceder a sus campos o en objetos para sus propiedades o métodos (funciones).

En el caso concreto estás usando un objeto global de Javascript llamado Math que contiene varias operaciones (métodos) que son accedidos a través de ese operador punto.

O sea, estás diciendo "Del objeto de operaciones matemáticas global que define Javascript, me coges al método (función del objeto) floor con los operandos tal y cual. Que en ese caso casualmente es otro objeto Math con otra función (método) llamada random.

Si defines una tupla (registro o como lo llames) que es una estructura compuesta de modo que tienes una variable llamada medidas que contiene altura, ancho y profundidad algo parecido a... (en pseudocódigo):

tipo MEDIDA medidas {
   ancho: entero;
   alto: entero;
   profundo: entero;
}

Podrías referenciar en plan medidas.ancho = 10;
Al final un objeto normalmente es una tupla on asteroids, por ejemplo en el caso del Perl que es un hash (tipo tupla en perl) con una "bendición" (bless) que básicamente le añade el tipo y la herencia y ya está.


EDIT:
Cita de: Faerindel en 12 de Abril de 2021, 02:21
Oh, pero ese punto está dentro de una string. VSCode no te va a hilar tan fino de intentar comprobar lo que le pasas a querySelector() (¿WebStorm quizá? Que por algo es de pago).
Incorrecto, el vscode si tiene la extensión para el lenguaje de programación te validará la sintaxis y te validará si existe tal propiedad, subtipo o método y seguramente te autocomplete o como mínimo te muestre la lista de opciones.
Título: Re:Programacion
Publicado por: Paradox en 12 de Abril de 2021, 13:36
Cita de: jug0n en 12 de Abril de 2021, 09:45
Nodejs para servidor.

Y añadiría mongodb para la base de datos.
Probablemente sea la respuesta menos arriesgada aunque yo diría que depende de lo que quieras hacer.

Para front casi seguro que acabas con js, para el backend es posible que uses java o nodejs o similar.

Kotlin está pegando muy fuerte con android, depende de lo que quieras hacer puede ser una buena opción.
Título: Re:Programacion
Publicado por: Faerindel en 12 de Abril de 2021, 13:42
A mí me está dando un rollo Vande cada vez que veo a alguien empezando en esto con JS y se abruma. Estoy a un tris de recomendar empezar con Pascal y todo.  :vande:
Título: Re:Programacion
Publicado por: jug0n en 12 de Abril de 2021, 15:08
Cita de: Paradox en 12 de Abril de 2021, 13:36
Cita de: jug0n en 12 de Abril de 2021, 09:45
Nodejs para servidor.

Y añadiría mongodb para la base de datos.
Probablemente sea la respuesta menos arriesgada aunque yo diría que depende de lo que quieras hacer.

Para front casi seguro que acabas con js, para el backend es posible que uses java o nodejs o similar.

Kotlin está pegando muy fuerte con android, depende de lo que quieras hacer puede ser una buena opción.

hombre, me refería a que si quiere hacer backend con js, lo que se usa es node, también puede ser deno, aunque yo si tuviera que empezar a aprender un nuevo lenguaje, me llama rust y go.

Si quiere hacer una app, si, mejor kotlin, pero si solo quiere aprender un lenguaje que le sirva para todo, con javascript, en el backend con node, y para el front yo recomendaría react, se ahorra muchos mas dolores de cabeza.

Yo también aprendí con pascal, era lo que hacíamos en primero del grado superior xD
Título: Re:Programacion
Publicado por: Paradox en 12 de Abril de 2021, 17:41
go mola, lo he usado para algunas cosillas y la verdad es que es muy divertido, pero bueno, como decía hoy en día si sabes js casi que vas a cualquier parte así que es una opción poco arriesgada, y como dices sirve tanto para front como back, así que es un punto extra.
Título: Re:Programacion
Publicado por: raul_isl en 12 de Abril de 2021, 18:50
A ver, mi idea es un poco aprender y ya. Si vamos a lo que me llama, seria seguridad informática, que parece muy interesante, pero como ese monstruo me parece muuuy grande, prefiero aprender primero programación, y después ya ir mirando.
Me interesa lo de la app porque hacer una me parece una buena forma de practicar y afianzar conocimientos, sin mas. Además, ya tengo idea para una que me puede servir en mi día a día.
Título: Re:Programacion
Publicado por: Bill en 27 de Abril de 2021, 21:39
Cita de: raul_isl en 11 de Abril de 2021, 01:07
Otra pregunta. Como no os suicidais todos los putos dias?

Lo hacemos. Morimos cada día. Unos días morimos mucho. Otros días morimos menos. Pero morimos.
Título: Re:Programacion
Publicado por: jug0n en 28 de Abril de 2021, 19:51
Eso, o amenazas con matar a todo el mundo, yo eso lo he visto en mi trabajo día tras día...
Título: Re:Programacion
Publicado por: Bill en 02 de Mayo de 2021, 22:27
Bueno, aquí se venía a hablar de programación, ¿no?

Alguien de COBOL?
Título: Re:Programacion
Publicado por: jug0n en 03 de Mayo de 2021, 09:48
Murieron cuando cayó el meteorito.
Título: Re:Programacion
Publicado por: Orestes en 03 de Mayo de 2021, 11:53
(http://www.adamusdrakeproductions.com/uploads/1/0/9/5/10958062/published/aki.jpg)
Título: Re:Programacion
Publicado por: raul_isl en 03 de Mayo de 2021, 23:36
(https://static.wikia.nocookie.net/wowpedia/images/8/8e/Fool%27s_Gold_TCG.jpg)
EhPortal 1.39.2 © 2024, WebDev