Python aplicado a la Electricidad y Electrónica (12)

En este nuevo artículo de esta serie dedicada a Python veremos un nuevo tipo de variables y lo emplearemos en un programa que nos diga que colores deben tener las bandas de una resistencia a partir de su valor en ohms.

Cuando comenzamos nuestro aprendizaje de Python vimos el concepto de variable y el de tipo. También analizamos los tipos mas comunes, como el entero (int), el flotante (float), el texto (string) y el lógico (boolean). Con esos tipos nos arreglamos para escribir nuestros programas, por lo menos hasta ahora.

El problema que les planteo ahora es escribir un programa que nos indique que colores deben tener las bandas de una resistencia de un valor determinado. Es decir, ingresando al programa el valor en ohms, por ejemplo 1200, éste debe indicar que colores tendrá esa resistencia, en este caso Marrón, Rojo y Rojo (para simplificar, comencemos ignorando a la tolerancia).

Hay, seguramente, varias maneras de resolver este problema. Tal vez una sería separar el valor numérico de la resistencia en partes, el primer dígito guardarlo en una variable, el segundo dígito en otra y la cantidad de ceros en una tercera, para luego analizar cada uno con una serie de instrucciones if-elif, comparando con cada uno de los diez valores posibles. Dejando por un momento de lado cómo separar el valor numérico, parte de ese programa se vería mas o menos así:

Primera versión con if-elif

Esta parte sirve sólo para la primer banda. Deberíamos repetir las mismas 10 consultas para la segunda y otras 10 más para la tercera. ¿Funcionaría con todas esas consultas? Si, seguramente, pero son demasiadas líneas de código para un problema tan sencillo, muchas probabilidades de equivocarse al escribir tanto y mas trabajo si luego tenemos que modificar el código. ¿Cómo lo podríamos simplificar?

Una manera de simplificar ese código sería agrupar de alguna forma todos los textos de los colores que en el ejemplo anterior están separados en una sola variable. Python tiene un tipo que nos ayuda con eso, se llama lista.

Una lista es una única variable que agrupa o reúne a varios valores que en general tienen alguna relación. ¿Se acuerdan cuando comparamos a una variable con una cajita? Siguiendo con la idea, una lista sería una cajita pero con varias divisiones, en cada una de las cuales podemos guardar valores diferentes.

Una lista es como una caja con divisiones (Fuente: Pixabay)

En la imagen de mas arriba la caja es un “pastillero” que guarda medicamentos para cada día de la semana. Si tuviéramos que etiquetarlo podríamos ponerle “Pastillas” como nombre. De la misma forma, una variable tipo lista tiene un nombre único que agrupa a todos los valores que contiene.

En Python, una lista se define con sus valores de la siguiente forma:

De manera similar a como hacíamos con otros tipos de variable, con el signo “=” pero esta vez encerrando todos lo valores entre corchetes “[ ]”.

Entonces usando una lista podemos guardar todos juntos los colores que pueden tener las bandas de las resistencias. Algo así:

Como se puede ver en la consola, podemos definir una lista con un nombre (“colores”) que contiene todos los textos dentro. Cuando pedimos a Python que nos muestre la variable “colores”, nos muestra todos los textos.

Llegados a este punto pueden pensar: bueno, si, pero ¿en que nos ayuda esto a simplificar el código? Tengan paciencia, ya estamos llegando.

En la prueba anterior, al pedir a Python el contenido de “colores” nos mostró la lista completa. Pero seguramente vamos a necesitar acceder a cada uno de los elementos de la lista de manera individual. Volviendo al ejemplo del pastillero, necesitamos algún método para saber el contenido de cada división, de cada compartimiento, por ejemplo para saber cuantas pastillas hay almacenadas para el día viernes.

En Python, los elementos de la lista se acceden a través de un índice numérico que vale 0 para el primer elemento y se va incrementando en una unidad. El índice se indica entre corchetes de esta manera:

lista [indice]

Nuestra lista con los colores tendría el siguiente aspecto:

Es decir, colores [0] contiene “NEGRO” y colores [5], “VERDE”

Ahora si podemos apreciar la utilidad de tener agrupados todos los colores en una lista. Al estar ordenados según su correspondencia numérica lo único que tenemos que hacer es “sacar” de la lista el nombre del color que se corresponde con cada uno de los valores numéricos de la resistencia. Volviendo al ejemplo inicial, si el primer dígito es 1, el segundo 2 y la cantidad de ceros también 2, la nueva versión del código quedaría asi:

Nueva versión usando una lista

Si lo hacemos funcionar nos entrega lo siguiente:

Mucho mas sencillo no?

Usando unas pocas líneas hemos logrado el mismo resultado, de una forma mucho mas clara y elegante.

Todavía nos queda algo ¿cómo separamos en tres variables numéricas el valor en ohms de la resistencia? Otra vez las listas nos simplifican la tarea.

Python, y este es un ejemplo de su flexibilidad , nos permite interpretar a las variables de texto como una lista, en la que cada casillero está ocupado por una letra del texto. Por ejemplo si tenemos una variable llamada “texto” que contiene la palabra “HOLA”, las letras se almacenan de esta manera:

Al interpretar el texto como una lista, podemos acceder individualmente a cada caracter o letra usando un índice. En este caso, texto[0] contendrá “H” y texto[3], “A”.

Retomando nuestro programa, si ingresamos el valor numérico de la resistencia como texto, podremos acceder a cada uno de los dígitos. Si la variable se llama “resistencia” y contiene “1200”, podemos separar los dos primeros dígitos de una manera sencilla:

digito1 = int (resistencia [0])

digito2 = int (resistencia [1])

Probemos con la consola:

Ya tenemos el primero y el segundo dígito separados. ¿Cómo hacemos para contar la cantidad de ceros que siguen?

Python tiene varias instrucciones para trabajar con listas y textos. En esta ocasión nos va a resultar de utilidad la instrucción len, que aplicada a un texto nos devuelve la cantidad de caracteres que contiene (o lo que es lo mismo, su longitud).

Pero la cantidad de ceros no es igual a la longitud del texto, no debemos contar los dos primeros dígitos, así que lo que estamos buscando es:

ceros = len (resistencia) – 2

Es decir, la longitud total menos los dos primeros caracteres. Volviendo al ejemplo de 1200 ohms:

Poniendo todo esto junto ya tenemos nuestro programa completo:

Versión completa

Veamos como funciona con algunos valores:

Con 10 ohms funciona correctamente porque podemos sacar el primer y segundo dígito, la longitud de “resistencia” es 2 y al restarle 2 queda 0, valor que al ser usado como índice en los colores nos devuelve “NEGRO”, lo que está correcto. Sin embargo, con 1 ohm tenemos un error al intentar obtener resistencia[1], porque no existe. Para evitar este error tenemos al menos dos opciones: luego de ingresar “resistencia”, comprobar que su longitud sea mayor que 1. Si eso no se cumple, mostrar un mensaje como “Lo siento, valor demasiado pequeño”. Al menos no obtendremos un mensaje de error. La otra opción es hacer la misma comprobación y tomar este como un caso particular y cambiar ligeramente el método para obtener los colores. Lo dejo como un desafío para quien quiera pulir mas el código.

Como siempre, esperando que el artículo les haya sido de utilidad, nos encontramos en la próxima entrega.

Prueba el código

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Habilitar notificaciones OK No, gracias