sábado, 27 de julio de 2024

Funciones de bucle: ciclo for

Función de bucle FOR

En general, un bucle es una estructura de control que repite un bloque de instrucciones. Un bucle for es un bucle que repite el bloque de instrucciones un número prederminado de veces. El bloque de instrucciones que se repite se suele llamar cuerpo del bucle y cada repetición se suele llamar iteración.

La sintaxis de un bucle for es la siguiente:

No es necesario definir la variable de control antes del bucle, aunque se puede utilizar como variable de control una variable ya definida en el programa.

El cuerpo del bucle se ejecuta tantas veces como elementos tenga el elemento "iterable" (elementos de una lista o de un range(), caracteres de una cadena, etc.). Por ejemplo:



Como se puede observar, la lista tiene 3 elementos, por ello, el cuerpo del bloque, que solamente es la impresión de la cadena 'Ciclo: ', se concatena o "pega" con el valor asignado en cada ciclo a la variable "i" mismo que corresponde a cada valor de la lista, creando 3 mensajes por la cantidad de elementos de la lista.

En este caso, el elemento iterable es una variable tipo cadena que tiene el valor "Hola", sus letras son los elementos de este iterable por tanto la variable "i" tendrá asignado el valor de cada letra de la cadena de izquierda a derecha, el ejemplo imprime la palabra "Letra :" concatenada a cada valor de "i" asignado en cada bucle.

Hasta este punto podemos concluir que los elementos de los objetos iterables van a permitir crear la cantidad de bucles que se van a ejecutar en él, y esa cantidad de bucles no tendrán nada que ver con el valor de cada elemento, es decir, dos listas formadas por [0, 1, 2, 3] o [1, 1, 1, 1] crearán la misma cantidad de bucles. Ejemplo:


En estos dos ejemplos la variable "i" que usualmente se le denomina "iterador" no se utiliza, por lo que una alternativa para no utilizar una variable iterador en el bucle es usar el sub guion ( _ ) en lugar de dicha variable, esto no causará ningún efecto y forma parte de las buenas practicas de los programadores ya que se entiende que el bucle solo crea los ciclos y no utiliza una variable iterador. Por ejemplo:

Ahora bien, los valores de cada elemento que compone al elemento iterador del bucle que son asignados al iterador, se pueden utilizar para realizar operaciones o asignaciones según el valor que tengan en cada ciclo, por ejemplo:


En este ejemplo, el elemento iterador es una lista con 3 elementos, en este caso se usa una variable iterador llamada "i" a la que se le va a asignar el valor de cada elemento del elemento iterador, finalmente usando una expresión f, se imprime por pantalla un texto que incluye el valor actual de "i" en cada ciclo y se realiza una operación de potencia al cuadrado con el mismo.

En los ejemplos anteriores se han utilizado una lista y cadena de caracteres para facilitar la comprensión del funcionamiento de los bucles pero, si es posible hacerlo, se recomienda utilizar tipos range(), entre otros motivos porque durante la ejecución del programa ocupan menos memoria en el ordenador.

El siguiente programa es equivalente al programa del ejemplo anterior sobre la implementación de un bucle con una lista de 3 elemento como elemento iterador:

Recordemos que range es un tipo de dato que permite crear series de valores numéricos en base a varios "parámetros" que se incluyen al momento de implementarla. Hay varias formas de utilizarla según la cantidad de parámetros que se incluyen. Los tres argumentos del tipo range(m, n, p) son:

  • m: el valor inicial
  • n: el valor final (que no se alcanza nunca)
  • p: el paso (la cantidad que se avanza o retrocede cada vez)

Si se incluyen 3 parámetros:


Si se incluyen 2 parámetros:


Si se incluye 1 parámetro:

Las tres formas generan el mismo resultado, pero se puede observar que se pueden usar de cualquiera de ellas teniendo en cuenta la particularidad de cada una. Es posible generar secuencias que vayan en decremento también, indicando un paso negativo y los valores de inicio y final adecuados:



miércoles, 24 de julio de 2024

Funciones condicionales: if ... elif ... else ...

Función condicional: if ... elif ... else ...

Esta estructura permite condicionar la ejecución de uno o varios bloques de sentencias al cumplimiento de una o varias condiciones.

Sentencias condicionales: if ...

La estructura de control if ... permite que un programa ejecute unas instrucciones cuando se cumplan una condición. En inglés "if" significa "si" (condición).

Sintaxis de la sentencia condicional if ...

La sintaxis de la construcción if es la siguiente:

Podremos entender un poco mejor su funcionamiento con el siguiente diagrama de flujo sobre condicional if ... 

La ejecución de esta construcción es la siguiente:

  • La condición se evalúa siempre.
    • Si el resultado es True se ejecuta el bloque de sentencias
    • Si el resultado es False no se ejecuta el bloque de sentencias.

La primera línea contiene la condición a evaluar y es una expresión lógica. Esta línea debe terminar siempre por dos puntos (:).

A continuación viene el bloque de órdenes que se ejecutan cuando la condición se cumple (es decir, cuando la condición es verdadera). Es importante señalar que este bloque debe ir sangrado, puesto que Python utiliza el sangrado para reconocer las líneas que forman un bloque de instrucciones. El sangrado que se suele utilizar en Python es de cuatro espacios, pero se pueden utilizar más o menos espacios. Al escribir dos puntos (:) al final de una línea, el editor sangrará automáticamente las líneas siguientes. Para terminar un bloque, basta con volver al principio de la línea.

Bifurcaciones: if ... else ...

La estructura de control if ... else ... permite que un programa ejecute unas instrucciones cuando se cumple una condición y otras instrucciones cuando no se cumple esa condición. En inglés "if" significa "si" (condición) y "else" significa "si no o caso contrario".

Sintaxis de la sentencia condicional if ... else ...

La sintaxis de la construcción if ... else ... es la siguiente:

La ejecución de esta construcción es la siguiente:

  • La condición se evalúa siempre.
    • Si el resultado es True se ejecuta solamente el bloque de sentencias si se cumple.
    • Si el resultado es False se ejecuta solamente el bloque de sentencias si no se cumple.

Para entender mejor, veamos el siguiente flujo grama de la bifurcación:

La primera línea contiene la condición a evaluar. Esta línea debe terminar siempre por dos puntos (:).

A continuación viene el bloque de órdenes que se ejecutan cuando la condición se cumple (es decir, cuando la condición es verdadera). Es importante señalar que este bloque debe ir sangrado, puesto que Python utiliza el sangrado para reconocer las líneas que forman un bloque de instrucciones. El sangrado que se suele utilizar en Python es de cuatro espacios, pero se pueden utilizar más o menos espacios. Al escribir dos puntos (:) al final de una línea, IDLE sangrará automáticamente las líneas siguientes. Para terminar un bloque, basta con volver al principio de la línea.

Después viene la línea con la orden else, que indica a Python que el bloque que viene a continuación se tiene que ejecutar cuando la condición no se cumpla (es decir, cuando sea falsa). Esta línea también debe terminar siempre por dos puntos (:). La línea con la orden else no debe incluir nada más que el else y los dos puntos.

En último lugar está el bloque de instrucciones sangrado que corresponde al else.

Más de dos alternativas: if ... elif ... else ...

La construcción if ... else ... se puede extender añadiendo la instrucción elif.

La estructura de control if ... elif ... else ... permite encadenar varias condiciones. elif es una contracción de else if.

Sintaxis de la sentencia condicional if ... elif ... else ...

La sintaxis de la construcción if ... elif ... else ... es la siguiente:

  • Si se cumple la condición 1, se ejecuta el bloque 1
  • Si no se cumple la condición 1 pero sí que se cumple la condición 2, se ejecuta el bloque 2
  • Si no se cumplen ni la condición 1 ni la condición 2, se ejecuta el bloque 3.

Esta estructura es equivalente a la siguiente estructura de if ... else ... anidados, por lo que para entenderlo mejor veamos el siguiente diagrama de flujo:

Tomando en cuenta todo lo mencionado en cuanto a la forma de escribir el código el siguiente es un ejemplo de más de dos alternativas:





Funciones de salida y entrada de datos en Python

Salida por pantalla: la función print()

En Informática, la "salida" de un programa son los datos que el programa proporciona al exterior. Aunque en los inicios de la informática la salida más habitual era una impresora, hace muchos años que el dispositivo de salida más habitual es la pantalla del ordenador.

La función print()

En los programas, para que python nos muestre texto o variables hay que utilizar la función print().

La función print() permite mostrar texto en pantalla. El texto a mostrar se escribe como argumento de la función:


Las cadenas se pueden delimitar tanto por comillas dobles (") como por comillas simples (').

 

La función print() admite varios argumentos seguidos. En el programa, los argumentos deben separarse por comas. Los argumentos se muestran en el mismo orden y en la misma línea, separados por espacios:

 

Cuando se trata de dos cadenas seguidas, se puede no escribir comas entre ellas, pero las cadenas se escribirán seguidas, sin espacio en blanco entre ellas:


Al final de cada print(), Python añade automáticamente un salto de línea:


Para generar una línea en blanco, se puede escribir una orden print() sin argumentos.

 

Si se quiere que Python no añada un salto de línea al final de un print(), se debe añadir al final el argumento end="":

 

En el ejemplo anterior, las dos cadenas se muestran pegadas. Si se quieren separar los argumentos en la salida, hay que incluir los espacios deseados (bien en la cadena, bien en el argumento end):

 

 

El valor del parámetro end puede ser una variable:

 

El valor del parámetro end puede ser una cadena f:

 

Para incluir comillas dentro de comillas, se puede escribir una contrabarra (\) antes de la comilla para que Python reconozca la comilla como carácter, no como delimitador de la cadena:

 

O escribir comillas distintas a las utilizadas como delimitador de la cadena:

 

La función print() permite incluir variables o expresiones como argumentos, lo que nos permite combinar texto y variables:


 

La función print() muestra los argumentos separados por espacios, lo que a veces no es conveniente. En el ejemplo siguiente el signo de exclamación se muestra separado de la palabra.

 

A partir de Python 3.6 se recomienda utilizar las cadenas "f".


En general, las cadenas "f" permiten combinar, cadenas, variables y expresiones de una forma más clara:


Entrada por teclado: la función input()

En Informática, la "entrada" de un programa son los datos que llegan al programa desde el exterior. Actualmente, el origen más habitual es el teclado, aunque los programas informáticos permiten también la entrada de datos por micrófono, escáner, ratón y demás dispositivos de entrada.

La función input()

La función input() permite obtener texto escrito por teclado. Al llegar a la función, el programa se detiene esperando que se escriba algo y se pulse la tecla Enter, como muestra el siguiente ejemplo:

En el ejemplo anterior, el usuario escribe su respuesta en una línea distinta a la pregunta porque Python añade un salto de línea al final de cada print().

 

Si se prefiere que el usuario escriba su respuesta a continuación de la pregunta, se podría utilizar el argumento opcional end en la función print(), que indica el carácter o caracteres a utilizar en vez del salto de línea. Para separar la respuesta de la pregunta se ha añadido un espacio al final de la pregunta.

 

Otra solución, más compacta, es aprovechar que a la función input() se le puede enviar un argumento que se escribe en la pantalla (sin añadir un salto de línea): 


Conversión de tipos (casting)

De forma predeterminada, la función input() convierte la entrada en una cadena, aunque escribamos un número. Si intentamos hacer operaciones, se producirá un error.

 

Si se quiere que Python interprete la entrada como un número entero, se debe utilizar la función int() de la siguiente manera:


De la misma manera, para que Python interprete la entrada como un número decimal, se debe utilizar la función float() de la siguiente manera:


Para tener en cuenta cuando se usa la función input():

  • Si el usuario no escribe un número, cuando se use las funciones int() o float() producirán un error.
  • Si el usuario escribe un número decimal, al usar la función int() producirá un error.
  • Si el usuario escribe un número entero, la función float() no producirá un error, aunque el número se escribirá con parte decimal (.0):

Variables como argumento de la función input()

La función input() sólo puede tener un argumento, que es el mensaje que se desea incorporar al ingreso por medio de la función, pero este mensaje puede estar formado por valores textuales y variables para dinamizar el ingreso de una lista por ejemplo.


Funciones de bucle: ciclo for

Función de bucle FOR En general, un bucle es una estructura de control que repite un bloque de instrucciones. Un bucle for es un buc...