Python – Detectando la plataforma

Objetivo: detectar en Python la plataforma sobre la que se está ejecutando un programa.

Aprender a programar no es una tarea que termina cuando uno conoce ya los rudimentos del lenguaje (estructuras de datos, control del flujo, funciones, etc.). En cierto modo se podría decir que es a partir de ese punto donde empieza la verdadera labor del programador, momento en el cual se sumerge a investigar en la periferia de librerías que orbitan alrededor del lenguaje en sí.

Uso indistintamente los términos biblioteca y librería. Aunque la primera es, estrictamente, la traducción correcta de library, librería es un término ampliamente aceptado por la comunidad de programadores.

Las librerías extienden la funcionalidad del lenguaje y nos acercan al mundo real, a los problemas cotidianos que todo programador debe afrontar. Nos ayudan a no tener que reinventar la rueda. Ponen a nuestro alcance herramientas con código ampliamente demostrado que resuelven problemas concretos. Además, pueden abstraer una determinada realidad ahorrándonos tener que aprender su funcionamiento interno. Por ejemplo, mi propio cliente de Twitter, desarrollado en Python, hace un uso intensivo de la librería de terceros Tweepy, que encapsula el API de Twitter y me evita tener que invertir tiempo aprendiendo sus pormenores.

Su importancia es tal, que muchas veces la decisión de aprender o no un determinado lenguaje viene marcada por la capacidad de poder utilizar las librerías asociadas.

Ese es uno de los motivos por los que recomiendo no casarse con ningún lenguaje y aprender cuantos más mejor: para poder tener acceso a un vasto universo de colecciones de clases, módulos y funciones que de ese modo tendremos a nuestra disposición.

Python, además de contar con un fabuloso conjunto de librerías de terceros, es famoso especialmente por suministrarse pilas incluidas, haciendo mención a la inmensa biblioteca estándar a la que se tiene acceso desde el mismo momento en que se instala Python.

El programa que realizaremos hoy tiene una misión muy simple: reflejar mi opinión sobre qué plataforma es mejor, Linux, Mac o Windows.

Aunque quien ejecute el programa no lo sepa, lo cierto es que esa discusión me trae sin cuidado y las tres me parecen sobresalientes. El programa será diplomático y responderá lo que el usuario quiere oir, que probablemente coincidirá con el sistema operativo desde el cual está trabajando en ese momento.

El módulo sys, disponible en la librería estándar de Python, abstrae muchos de los detalles de la arquitectura subyacente. Entre ellos se encuentra el que buscamos:

sys.platform

Contiene una cadena de caracteres con la plataforma en la que se está ejecutando el programa.

Obsérvalo en acción:

# ¿Qué plataforma es mejor, Linux, Mac o Windows?

import sys

plataforma = sys.platform

if plataforma == 'linux':
    print('Sin lugar a dudas, donde esté el pingüino que se quite todo lo demás')
elif plataforma == 'darwin':   # La firma del Mac
    print('Siempre he sentido simpatía por la manzana, se nota dónde hay calidad')
elif plataforma == 'win32':
    print('Abrid las ventanas, que entre la luz...')
else:    # Para otros sistemas y variantes de Unix
    print('No me gusta ninguno de los tres; ¿coincides conmigo?')

Si lo ejecuto desde el PC desde el que escribo estas líneas, me devuelve:

>>> 
Abrid las ventanas, que entre la luz...

Este código puede presentar problemas si utilizas versiones de Python anteriores a 3.3. En estas, a la respuesta ‘linux‘ se le agregaba un sufijo numérico indicando la versión mayor de kernel, de modo que la comprobación, tal como aparece en el programa, no detectaría la plataforma. En ese caso es mejor que se realice comprobando si comienza por ‘linux‘ en vez de si se produce una coincidencia exacta.

El método startswith, aplicable a una cadena de caracteres, devuelve True si la cadena comienza por los caracteres facilitados como parámetro.

>>> s = 'pradera'
>>> s.startswith('prad')
True

Sustituye, entonces la expresión

plataforma == 'linux'

por

plataforma.startswith('linux')

y la detección se realizará correctamente.

Consulta la documentación de Python y tómate la molestia de revisar lo que el módulo system puede ofrecerte, como saber la versión de Python que se está ejecutando, o el path de búsqueda de módulos.

Y, por lo general, esfuérzate en conocer la biblioteca estándar de Python. Cada módulo que incorpores a tu kit de herramientas te hará subir de nivel como programador.

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2013/02/python-detectando-la-plataforma/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

La escala menor armónica

Objetivo: aprender a construir la escala menor armónica.

Recordemos la fórmula de la escala menor natural:

1 – 2 – b3 – 4 – 5 – b6 – b7

Comparándola con una escala mayor, su carácter diferencial es la presencia de la tercera, sexta y séptima menores.

Si la séptima, en vez de tomarla menor, la dejamos mayor, obtenemos una nueva escala:

1 – 2 – b3 – 4 – 5 – b6 – 7

Esta disposición de notas recibe el nombre de escala menor armónica.

Recuerda que esta escala es menor debido a la presencia de b3, grado que caracteriza a este tipo de escalas.

Averigüemos, como ejemplo, las notas de Do menor armónica. Partimos de la escala Do mayor:

C – D – E – F – G – A – B – C

Y bajamos un semitono los grados b3 y b6, tal como indica la fórmula:

Do menor armónica: C – D – Eb – F – G – Ab – B – C

Aprovechando que tenemos esta escala, calculemos ahora la distancia que hay entre cada grado sucesivo:

C – D: Tono (T)
D – Eb: Semitono (S)
Eb – F: Tono (T)
F – G: Tono (T)
G – Ab: Semitono (S)
Ab – B: ¡Tono y medio, tres semitonos! Representaremos esta distancia con la letra W.
B – C: Semitono (S)

De modo que ya tenemos a nuestra disposición la fórmula absoluta general de la escala menor armónica:

T – S – T – T – S – W – S

Otra fórmula que puede resultar interesante es la relativa a la escala menor natural. Designamos mediante primas los grados de esta última:

1′ – 2′ – 3′ – 4′ – 5′ – 6′ – 7′

Hemos dicho que la diferencia entre la escala menor natural y la armónica es que en esta el séptimo grado es mayor, es decir, un semitono más alto que el correspondiente de la escala menor natural. Así pues, la fórmula buscada es:

1′ – 2′ – 3′ – 4′ – 5′ – 6′ – #7′

Como instrumentista esta fórmula te puede resultar útil si no conoces al dedillo aún la escala menor armónica pero sí manejas con soltura la natural. Simplemente dibuja esta y, cuando alcances el séptimo grado, súbelo un semitono.

Vamos a realizar un sencillo ejercicio práctico calculando las notas de la escala Mi menor armónica empleando las tres fórmulas explicadas:

a) Fórmula relativa a la escala mayor:

Partimos de Mi mayor:

Mi mayor: E – F# – G# – A – B – C# – D# – E

Tomamos los grados indicados en la fórmula: 1 – 2 – b3 – 4 – 5 – b6 – 7

Mi menor armónica: E – F# – G – A – B – C – D# – E

b) Fórmula relativa a la escala menor natural:

Partimos de Mi menor natural:

Mi menor natural: E – F# – G – A – B – C – D – E

Tomamos los grados indicados en la fórmula, es decir, subimos un semitono el séptimo grado: 1′ – 2′ – 3′ – 4′ – 5′ – 6′ – #7

Mi menor armónica: E – F# – G – A – B – C – D# – E

c) Fórmula absoluta:

T – S – T – T – S – W – S

Partimos de E.

Subimos un tono (T): F#
Subimos un semitono (S): G
Subimos un tono (T): A
Subimos un tono (T): B
Subimos un semitono (S): C
Subimos un tono y medio (X): D#
Subimos un semitono (S): E

De modo que:

Mi menor armónica: E – F# – G – A – B – C – D# – E

Para finalizar, voy a indicar otro truco interesante para los instrumentistas que comienzan a estudiar esta escala. Tal como expliqué cuando tratamos la escala dórica o la menor natural, es muy importante invertir esfuerzos en aprender las escalas directamente sin recurrir a transposiciones modales. Pero, entre tanto, este tipo de técnicas pueden resultar de utilidad.

Utilicemos el concepto de escalas relativas. Vimos que escalas como Do mayor y La menor natural presentaban las mismas notas y dijimos que La menor y Do mayor eran escalas relativas.

Do mayor: C – D – E – F – G – A – B – C
La menor natural: A – B – C – D – E – F – G – A

La menor armónica será la misma, pero con el séptimo grado un semitono más alto:

La menor armónica: A – B – C – D – E – F – G# – A

Reordenemos estas notas, pero empezando por Do:

C – D – E – F – G# – A – B – C

El resultado es muy similar a la escala mayor (le pondremos nombre cuando hablemos de los modos de la escala menor armónica), con la única diferencia de que el quinto grado está aumentado un semitono, hecho que aprovecharemos en nuestro truco.

Imagina que tienes que improvisar en Mi menor armónica y que aún no sabes cómo dibujar esa escala en tu instrumento. Imagina que tampoco conoces la escala menor natural y que sólo tienes aprendidas las digitaciones de la escala mayor.

Comienza calculando la relativa mayor a Mi menor, que ya sabes que está tres semitonos por delante: Sol mayor.

Sol mayor tiene las mismas notas que Mi menor natural. Son escalas relativas.

Para obtener la digitación de Mi menor armónica, utiliza la misma que Sol mayor, pero cuando llegues al quinto grado (Re), auméntalo un semitono (Re#). El resto de las notas son exactamente las mismas.

Puedes tardar algunos meses en interiorizar la escala menor armónica. Ponte manos a la obra y disfruta de su peculiar sonido aflamencado que le confiere ese intervalo de tono y medio entre el sexto y séptimo grados.

Javier Montero Gabarró


La escala menor armónica


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice completo de artículos sobre armonía.

Cómo se compuso Nostalgia, de Viciosfera

En una expresión artística creativa, ¿cuánto hay de participación consciente, fruto de nuestros conocimientos teóricos o del deseo de experimentar, y cuánto es debido a una actividad inconsciente, en la que nos resulta complicado, si no imposible, identificar los procesos mentales involucrados?

La respuesta es tan subjetiva que posiblemente esa sería la única conclusión a la que llegaríamos.

Cuando escribo una canción suelo delimitar con claridad la frontera entre lo consciente e inconsciente. Deliberadamente comienzo introduciendo un marco de referencia y una serie de ligaduras que me resten grados de libertad (terminología que aprendí cuando estudiaba mecánica clásica en la facultad).

Una vez establecidas esas restricciones, resultado de una actividad mental consciente, pero no necesariamente menos creativa, me encuentro con un lienzo esbozado sobre el que ya sí me abandono a mi intuición y a otros procesos subconscientes que soy incapaz de describir.

La primera ligadura impuesta a Nostalgia fue su letra. A través de una amiga común conocí a Mª Luisa Viu, una incisiva poetisa sevillana que me ofreció hojas y hojas repletas de poemas a los que podría poner música. Entre ellos figuraba Nostalgia, cuya historia me cautivó en cuanto la lei.

Aún guardo algunos de esos poemas para recurrir a ellos en otra colaboración futura con María Luisa, que desde entonces se convirtió en seguidora incondicional de la banda.

La autora me otorgó permiso para modificar el texto todo lo que requiriera su adaptación musical, pero procuré que los cambios fueran mínimos para respetar en todo lo posible la creación original.

Diseccioné el texto en estrofas y elegí un fragmento que serviría de estribillo, el de mayor impacto emocional.

El siguiente conjunto de restricciones fueron armónicas

Decidí que la tonalidad de la canción debía resultar ambigua. Crear cierto grado de confusión tonal es una técnica a la que suelo recurrir con frecuencia.

En este caso, opté por jugar con dos tonalidades vecinas, Do mayor y Fa mayor, cuyas escalas difieren únicamente en una nota: SI, que es natural en la primera y bemol en la segunda.

La Intro del comienzo predispone ya al oyente a Do mayor, que se encuentra ahora con la primera línea de la estrofa:

C                 Dm         F        C
Todavía no te has ido y ya siento nostalgia

Pero en la segunda aparece un acorde inesperado:

       C               Gm            F      C
¿Por qué una foto me tiene que producir nostalgia?

El acorde Sol menor (Gm), que podría entenderse como un préstamo modal de la tonalidad paralela Do menor, está concebido con otra intención: es el acorde que se construye sobre el segundo grado de Fa mayor, tonalidad a la que la canción modulará en el estribillo.

Podríamos decir que la armonía de la estrofa está escrita en el modo mixolidio de Do, cuyos acordes son precisamente los mismos que Fa mayor. No obstante, pese a que el sustento armónico sugiere el modo mixolidio, la melodía de la estrofa, deliberadamente, evita utilizar la nota SI, que delataría su carácter modal.

En el último verso se produce, definitivamente, una poderosa modulación a Fa mayor gracias a la fuerza del IV – V7 – I final:

     C             Dm    Bb            C7       F
Una sensación, un deseo, hoy tengo nostalgia de ti.

El estribillo no es otra cosa sino el cliché armónico IV – V – I – vi, una fórmula que siempre funciona:

    Bb             C             F       Dm
Nostalgia de un paseo que no he dado
Nostalgia de unos labios que no he besado
Nostalgia de tu cuerpo, que mis brazos no han rodeado
    Bb           C           F
Nostalgia de estar junto a ti.

Concluido el estribillo, regresan los acordes de la Intro en el interludio , prepararando nuevamente Do mayor. Un descarado Sol séptima, como nexo de unión de ambas partes, se ocupa de la modulación.

La longitud de las estrofas del texto base es irregular, de ahí que la segunda aparición del modo mixolidio de Do sea más breve que la primera. En esencia, se trata de la misma armonía, pero simplificada.

Un total de tres veces se repite el juego de tonalidades estrofa – estribillo. Este último se duplica en su aparición final, pero con texto diferente, momento en el que la melodía alcanza el clímax y encuentra su nota más aguda.

Nostalgia, tal como fue grabada por Viciosfera en Almäví Estudios en enero de 2008:

(Haz clic aquí si el plugin no se carga correctamente)

Javier Montero Gabarró


Cómo se compuso Nostalgia, de Viciosfera


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice completo de artículos sobre armonía.

Python: Una función para iterar sobre listas anidadas

Objetivo: crear una función que ilustre cómo iterar sobre listas anidadas de cualquier profundidad.

Un lector del blog me planteaba ayer una interesante cuestión al hilo del artículo dedicado a la iteración sobre una lista con la sentencia for. Se preguntaba cómo proceder en el supuesto de que se tratara de listas anidadas en las que no conocemos a priori su profundidad de anidación.

Por ejemplo, supongamos que deseamos imprimir todos los enteros existentes en la siguiente lista:

lista_anidada = [1, [2, [3, 4, [5, 6], 7]], 8, [9, 10]]

Observa que el segundo elemento, que es el que presenta mayor nivel de anidación, es en realidad otra lista, cuyo segundo elemento es a su vez otra lista de la cual el tercer elemento es otra lista también. En este ejemplo en particular nos encontramos hasta cuatro niveles de profundidad. Nuestra función deberá ser genérica, en el sentido de que no conocerá de antemano la complejidad de la lista.

Una iteración ordinaria nos devolvería el siguiente resultado:

for elemento in lista_anidada:
    print(elemento)

1
[2, [3, 4, [5, 6], 7]]
8
[9, 10]

No nos sirve, pues pretendemos recuperar todos los elementos simples.

Procederemos de la siguiente forma:

Vamos a recorrer la lista de principio a fin. Si el elemento a tratar es una lista habrá que imprimir sus elementos individuales; si no lo es, imprimimos directamente su valor.

Observa con cuidado la frase «si el elemento a tratar es una lista habrá que imprimir sus elementos individuales». Es exactamente el mismo problema que al inicio, salvo que está reducido a un subconjunto más reducido: la lista anidada dentro de la lista.

Al resolver esta segunda cuestión nos aparecería nuevamente una lista anidada, esta vez del tercer nivel; el problema seguiría siendo exactamente el mismo, pero cada vez más reducido.

Escenario perfecto para una función recursiva

Para resolver la parte que dice «si el elemento a tratar es una lista», recurriremos a una función de Python que nos permite saber si un objeto es o no de un tipo determinado: isinstance().

Obsérvala en acción:

>>> a = 5
>>> b = 'casa'
>>> c = [1, 2]
>>> isinstance(a, list)
False
>>> isinstance(b, list)
False
>>> isinstance(c, list)
True

Implementar nuestra función resulta ya una tarea casi obvia:

def imprimir(lista):
    for elemento in lista:
        if isinstance(elemento, list):
            imprimir(elemento)
        else:
            print(elemento)

Fíjate en la técnica recursiva: si elemento es una lista, la función vuelve a llamarse a sí misma, pero esta vez sobre una lista anidada en el siguiente nivel de profundidad. Y así sucesivamente, ahondando todo lo necesario hasta que no quede un entero sin imprimir.

def imprimir(lista):
    for elemento in lista:
        if isinstance(elemento, list):
            imprimir(elemento)
        else:
            print(elemento)

lista_anidada = [1, [2, [3, 4, [5, 6], 7]], 8, [9, 10]]

imprimir(lista_anidada)

>>> 
1
2
3
4
5
6
7
8
9
10

No se salva ni el apuntador.

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2013/02/python-una-funcion-para-iterar-sobre-listas-anidadas/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

La escala dórica

Objetivo: presentar la escala dórica y sus fórmulas absoluta y relativa.

En nuestro apasionante viaje por el mundo de las escalas ha llegado el momento de hacer escala en otro de los modos griegos más comúnmente utilizados: el dórico.

En el artículo dedicado a la fórmula absoluta de los modos de la escala mayor dedujimos su composición:

Escala dórica: T – S – T – T – T – S – T

Para hallar la fórmula relativa, calculemos las notas de Do dórica y comparémoslas con las de la escala de Do mayor.

Partimos de Do.

Subimos un tono (T): Re
Subimos en semitono (S): Mi bemol
Subimos un tono (T): Fa
Subimos un tono (T): Sol
Subimos un tono (T): La
Subimos un semitono (S): Si bemol
Subimos un tono (T): Do

Es decir:

Do dórica: Do – Re – Mib – Fa – Sol – La – Sib – Do

O, en notación anglosajona:

C – D – Eb – F – G – A – Bb – C

La comparación con la escala de Do mayor (C – D – E – F – G – A – B – C) nos permite conocer de un modo inmediato su fórmula relativa:

Escala dórica: 1 – 2 – b3 – 4 – 5 – 6 – b7

Ante todo, la escala dórica es una escala menor, tal como delata la b3, indicando una tercera menor entre la tónica y el tercer grado. Vamos a compararla con la tradicionalmente reina de las escalas menores, la escala menor natural (o modo eólico).

Escala menor natural: 1 – 2 – b3 – 4 – 5 – b6 – b7
Escala dórica: 1 – 2- b3 – 4 – 5 – 6 – b7

Observa la siguiente conclusión: la diferencia entre una escala dórica y la correspondiente menor natural es que en la primera el intervalo entre la tónica y el sexto grado es mayor (6), mientras que en la segunda es menor (b6).

Si, como instrumentista, ya digitas bien la escala menor natural pero aún no te has aprendido la dórica, esta comparación puede servirte de gran ayuda. Simplemente, cuando llegues al sexto grado, increméntalo en un semitono y obtendrás la escala dórica.

Este hecho también lo podemos expresar numéricamente empleando una fórmula relativa a la escala menor natural:

Escala dórica: 1′ – 2′ – 3′ – 4′ – 5′ – #6′ – 7′

Las primas hacen mención a que los grados son comparados ahora con respecto a la escala menor natural, en lugar de la mayor.

Naturalmente, otra forma de acceder a la escala dórica como instrumentista, si aún no la tienes en la punta de los dedos, es a través de la escala mayor de la que es modo.

Por ejemplo, imagina que quieres hacer Sol dórica en la guitarra o el piano. Como el modo dórico se obtiene empezando una escala mayor por el segundo grado (que está a un tono del primero), para obtener la escala mayor de referencia basta con efectuar la operación inversa, es decir, restar un tono.

Si bajamos un tono Sol obtenemos Fa. Por lo tanto, la escala Sol dórica tiene las mismas notas que la escala Fa mayor (que se supone ya hemos de tener aprendida en el instrumento).

Como ejercicio práctico, vamos a calcular las notas de la escala Sol dórica usando tres técnicas diferentes:

1) Aplicando la fórmula absoluta
2) Mediante la fórmula relativa
3) Deduciendo la escala mayor de referencia de la que es modo

1) La fórmula absoluta de una escala dórica es:

T – S – T – T – T – S – T

Si partimos de G (Sol) y vamos, sucesivamente, agregando cada intervalo:

Subimos un tono (T): A
Subimos un semitono (S): Bb
Subimos un tono (T): C
Subimos un tono (T): D
Subimos un tono (T): E
Subimos un semitono (S): F
Subimos un tono (T): G

Sol dórica: G – A – Bb – C – D – E – F – G

2) La fórmula relativa de la escala dórica es:

1 – 2- b3 – 4 – 5 – 6 – b7

Tomamos entonces la escala Sol mayor, que ya sabemos tiene por notas (si no es el caso, aprende a calcularlas):

Sol mayor: G – A – B – C – D – E – F# – G

Y tomamos los grados indicados en la fórmula (diferenciándose en b3 y b7):

Sol dórica: G – A – Bb – C – D – E – F – G

3) Sol dórica es el segundo modo de una escala mayor. Para saber de cuál, restamos un tono a Sol, obteniendo Fa, que ya sabemos se compone de las siguientes notas:

Fa mayor: F – G – A – Bb – C – D – E – F

Cogemos las mismas notas, pero partiendo del segundo grado (G):

Sol dórica: G – A – Bb – C – D – E – F – G

La escala dórica es una escala imprescindible, sea cual sea el género musical en el que te desenvuelvas. Domínala cuanto antes en tu instrumento.

Javier Montero Gabarró


La escala dórica


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice completo de artículos sobre armonía.

Python: Un programa para la conversión de decimal a binario

Objetivo: crear una función en Python para la conversión de decimal a binario y, por extensión, a cualquier otra base.

Convertir a binario un número decimal es algo que no supone ningún misterio en Python:

>>> bin(81)
'0b1010001'

Incluso el proceso inverso, de binario a decimal, es simple:

>>> int('1010001', 2)
81

Pero la gracia, cuando uno aprende a programar, está en tratar de desarrollar el sexto sentido algorítmico, una faceta a menudo descuidada.

De modo que en el artículo de hoy diseñaremos nuestra propia función encargada de convertir un número decimal a binario, que después extenderemos para expresarlo en cualquier otra base.

Con frecuencia, descubrir el algoritmo subyacente implica realizar la tarea a mano prestando mucha atención a nuestros procesos mentales, convertirlos en palabras y transformarlos después en instrucciones propias del lenguaje de programación.

El ejemplo que nos atañe es sencillo, pues existe una correspondencia prácticamente directa entre nuestro proceso mental y el desarrollo formal, pero no siempre la hay y, en esos casos, es preciso atomizar lo que está pasando por nuestra cabeza.

En la escuela nos enseñan (o, al menos, enseñaban) el procedimiento para convertir a binario un número entero positivo en base decimal:

Dividimos el número entre dos y anotamos el resto de la división. Tomamos el cociente y lo dividimos entre dos, anotando el nuevo resto. Cogemos el nuevo cociente y continuamos la misma operación hasta que no podemos seguir adelante, pues el cociente ya es inferior a dos (uno, en las conversiones a binario). Tomamos entonces ese cociente (uno) y le agregamos, en orden inverso de aparición, todos los restos que hemos ido anotando en el camino.

Vamos a convertir, por ejemplo, 81 a binario:

81 : 2 = 40; Resto: 1
40 : 2 = 20; Resto: 0 
20 : 2 = 10; Resto: 0
10 : 2 = 5; Resto: 0
5 : 2 = 2; Resto: 1
2 : 2 = 1; Resto: 0

Ya no podemos seguir dividiendo entre dos, pues el cociente es uno. Tomamos este cociente, junto a todos los restos en orden inverso y encontramos 81 expresado en binario:

1010001

Nuestro algoritmo va a hacer exactamente lo mismo.

def binarizar(decimal):
    binario = ''
    while decimal // 2 != 0:
        binario = str(decimal % 2) + binario
        decimal = decimal // 2
    return str(decimal) + binario

La variable binario es un string que va acumulando cada resto. Observa su construcción, agregando a la izquierda cada nuevo resto.

La variable decimal parte con el número original, pero en cada iteración toma el valor del nuevo cociente resultado de la división entera. El bucle se repetirá continuamente mientras ese cociente sea distinto de cero. En ese momento, el anterior cociente (un uno), será el dígito más significativo del resultado, devuelto con la sentencia return.

Veamos en acción esta función:

def binarizar(decimal):
    binario = ''
    while decimal // 2 != 0:
        binario = str(decimal % 2) + binario
        decimal = decimal // 2
    return str(decimal) + binario

numero = int(input('Introduce el número a convertir a binario: '))
print(binarizar(numero))

>>> 
Introduce el número a convertir a binario: 81
1010001

Para convertir a cualquier otra base el procedimiento es exactamente el mismo, salvo que en lugar de realizar la división entera entre dos la hacemos en la nueva base.

def cambio_base(decimal, base):
    conversion = ''
    while decimal // base != 0:
        conversion = str(decimal % base) + conversion
        decimal = decimal // base
    return str(decimal) + conversion

numero = int(input('Introduce el número a cambiar de base: '))
base = int(input('Introduce la base: '))
print(cambio_base(numero, base))

>>> 
Introduce el número a cambiar de base: 81
Introduce la base: 5
311

Y ahora una conversión a octal:

>>> 
Introduce el número a cambiar de base: 81
Introduce la base: 8
121

Para hacer pruebas, evita utilizar bases superiores a 10, pues no disponemos de dígitos suficientes para mostrar el resultado. O bien puedes modificar el programa y crearte tus propios dígitos empleando letras del abecedario, como en el sistema hexadecimal.

Ejercicio propuesto 1: crea una función que convierta un número decimal a base 16 (hexadecimal). Necesitarás una especie de tabla que transforme los resultados del resto 10, 11, 12,…, 15 en A, B, C, …, F, respectivamente.

Ejercicio propuesto 2: crea una función que transforme de binario a decimal.

Ejercicio propuesto 3: crea una función que convierta a decimal un número expresado en cualquier otra base.

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2013/01/python-un-programa-para-la-conversion-de-decimal-a-binario/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

La escala menor natural

Objetivo: aprender a calcular la escala menor natural en cualquier tonalidad.

Apuesto a que hay una escala menor natural que ya conoces.

Toma las notas de Do mayor:

Do – Re – Mi – Fa – Sol – La – Si – Do

y vuelve a construirla empezando en La esta vez:

La – Si – Do – Re – Mi – Fa – Sol – La

o, en notación anglosajona:

A – B – C – D – E – F – G – A

Empezando en La nos encontramos con una escala completamente distinta a Do mayor. Las distancia entre sus grados no es la misma y su sonido es completamente diferente.

Esta escala, que termina y comienza en LA y tiene esa composición de notas, recibe el nombre de LA menor natural.

Ambas escalas están intimamente relacionadas, aunque suenen diferentes, pues poseen las mismas notas. La escala de LA menor natural es la relativa menor de DO mayor.

Es más, la escala menor natural no es más que uno de los modos de la escala mayor (caracterizados por que todos comparten las mismas notas): el modo eólico.

Por eso, encontrarás que a la escala menor natural se la conoce también como escala eólica.

Aunque ya vimos su fórmula absoluta cuando tratamos los modos, no está mal repetir aquí su cálculo.

Vamos a analizar la distancia que hay entre cada grado de la escala de LA menor natural:

A – B – C – D – E – F – G – A

Entre A y B hay un tono (T).
Entre B y C hay un semitono (S).
Entre C y D hay un tono (T).
Entre D y E hay un tono (T).
Entre E y F hay un semitono (S).
Entre F y G hay un tono (T).
Entre G y A hay un tono (T).

De modo que la fórmula absoluta es:

T – S – T – T – S – T – T

Esta fórmula nos permite calcular la escala menor natural en cualquier tonalidad sin más que ir contando tonos y semitonos.

Por ejemplo, calculemos las notas de Do menor natural:

Partimos de C.

Agregamos un tono (T), obteniendo D.
Agregamos un semitono (S), obteniendo Eb.
Agregamos un tono (T), obteniendo F.
Agregamos un tono (T), obteniendo G.
Agregamos un semitono (S), obteniendo Ab.
Agregamos un tono (T), obteniendo Bb.
Agregamos un tono, obteniendo, nuevamente, C.

De modo que,

Do menor natural: C – D – Eb – F – G – Ab – Bb – C

Además de representar una escala por su fórmula absoluta es común su representación relativa a la escala mayor.

Si comparamos, grado a grado, la escala de Do mayor con Do menor natural recientemente calculada podemos obtener la fórmula relativa.

Do mayor: C – D – E – F – G – A – B – C
Do menor natural: C – D – Eb – F – G – Ab – Bb – C

Observa que todos los grados coinciden salvo el tercero, sexto y séptimo, que están bajados un semitono. Así pues, la fórmula relativa de la escala menor natural es:

Menor natural: 1 – 2 – b3 – 4 – 5 – b6 – b7

No es necesario indicar el octavo grado, idéntico al primero, pero una octava más alto.

La fórmula relativa es más sencilla de recordar que la absoluta. La escala menor natural es como la mayor, pero los intervalos que forma la tónica con los grados tercero, sexto y séptimo son menores en vez de mayores (b3, b6, b7). Comprendido esto te será muy fácil retener otras escalas menores que estudiaremos más adelante, como la armónica o la melódica.

Vamos a ilustrar el uso de la fórmula relativa para calcular las notas de Re menor natural.

Comenzamos calculando la correspondiente escala mayor:

Re mayor: D – E – F# – G – A – B – C#

Bajamos un semitono los grados tercero, sexto y séptimo, dejando el resto intactos.

Re menor natural: D – E – F – G – A – Bb – C

Por lo general, sabiendo calcular (o reteniendo en la memoria) las escalas mayores y conociendo la fórmula relativa de cualquier escala, hallar su composición resulta prácticamente inmediato.

En los sucesivos artículos presentaremos escalas de todo tipo, acompañadas por sus fórmulas absoluta y relativa, y calcularemos sus notas empleando ambos métodos.

Javier Montero Gabarró


La escala menor natural


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice completo de artículos sobre armonía.

El mundo de las tonalidades relativas

Objetivo: aclarar el concepto de tonalidades relativas y aprender a calcularlas.

Echa un vistazo a las escalas Do mayor y La menor natural. ¿Qué tienen en común?

Do mayor: DO – RE – MI – FA – SOL – LA – SI – DO

La menor natural: LA – SI – DO – RE – MI – FA – SOL – LA

Son las mismas notas, solo que la secuencia comienza en un punto diferente.

Una pieza escrita en la tonalidad de Do mayor tiene la misma armadura que otra escrita en la tonalidad de La menor. Decimos que Do mayor y La menor son tonalidades relativas.

La escala La menor natural es la relativa menor de Do mayor, del mismo modo que Do mayor es la relativa mayor de La menor natural.

El hecho de que ambas escalas compartan las mismas notas no es algo que deba sorprendernos, pues la escala menor natural es uno de los modos de la escala mayor: el modo eólico. Todos los modos comparten las mismas notas; lo único que cambia es la nota en la que se inicia la secuencia.

Forma parte del bagaje de conocimientos de todo músico conocer de memoria las relativas menores de cada tonalidad mayor. Vamos a mostrar aquí cómo calcularlas.

Hemos dicho que la relativa de Do mayor es La menor. ¿Qué distancia hay entre Do y La?

Se trata de una sexta mayor, compuesta de 9 semitonos.

De este modo, podemos concluir que la relativa menor de una tonalidad mayor cualquiera se encuentra una sexta mayor por encima de esta.

[Si no sabes lo que es una sexta mayor o si no manejas con agilidad los intervalos, te recomiendo te leas los siete artículos del blog (tres teóricos y cuatro prácticos) dedicados al cálculo de intervalos.]

Ahora bien, en vez de buscar el LA que tenemos por delante de DO, a una sexta mayor, podemos recurrir al LA que hay por detrás, a una tercera menor (3 semitonos). Es más rápido contar tres semitonos hacia atrás que nueve hacia adelante.

Realicemos algunos ejemplos:

1) ¿Cuál es la relativa menor de Sol mayor?

Contamos tres semitonos hacia atrás:

SOL – SOLb/FA# (1) – FA (2)- MI (3)

La relativa menor de Sol mayor es, por lo tanto, Mi menor.

2) ¿Cuál es la relativa menor de La mayor?

Contamos tres semitonos hacia atrás:

LA – LAb/SOL# (1) – SOL (2) – SOLb/FA# (3)

¿Con cuál de las dos opciones nos quedamos, SOL bemol o FA sostenido?

Aunque ambas notas son enarmónicas, la respuesta correcta solo es una. Hemos dicho que ha de estar una TERCERA por detrás:

LA – SOL – FA

La relativa menor de LA mayor es, por lo tanto, FA# menor.

El ejercicio contrario, calcular la relativa mayor dada la tonalidad menor, no tiene más misterio que calcular una tercera menor hacia adelante.

3) ¿Cuál la relativa mayor de Sol menor?

Contamos tres semitonos hacia adelante:

SOL – SOL#/LAb (1) – LA (2) – LA#/SIb (3)

¿Con cuál nos quedamos, LA sostenido o SI bemol?

Nuevamente, la respuesta nos la da el hecho de que tiene que tratarse de una tercera.

SOL – LA – SI.

La relativa mayor de SOL menor es, por lo tanto, SI bemol mayor.

La tabla siguiente relaciona cada tonalidad con su relativa:

MAYOR MENOR
C A
C#/Db A#/Bb
D B
D#/Eb B#/C
E C#
F D
F#/Gb D#/Eb
G E
G#/Ab E#/F
A F#
A#/Bb Fx/G
B G#

Es importante que sepas calcular las tonalidades relativas y que, poco a poco, vayas memorizándolas, pues es algo a lo que, como músico, tendrás que recurrir con frecuencia.

Por ejemplo: el proceso de aprendizaje e interiorización de escalas es laborioso y requiere meses o incluso años de estudio. Un guitarrista puede dominar ya las diversas formas de la escala mayor y estar aprendiendo la escala menor. Entre tanto, puede salir del paso si conoce las tonalidades relativas.

Imaginemos que un guitarrista tiene que improvisar en Do menor, pero no conoce las posiciones de la escala aún. Si sabe que Do menor tiene por relativa mayor Mi bemol mayor, podrá utilizar cualquiera de las posiciones de Mi bemol mayor para improvisar en Do menor, pues ambas escalas, al ser relativas, comparten las mismas notas.

Naturalmente, también podría buscar un Do, como el de la quinta cuerda en el tercer traste, subir tres semitonos, aterrizando en el Mi bemol del sexto traste y desde ahí utilizar una de las posiciones que conozca de Mi bemol mayor. Abundaremos en todo esto más adelante en la sección de guitarra del blog.

Javier Montero Gabarró


El mundo de las tonalidades relativas


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice completo de artículos sobre armonía.

Python: El calificador de ámbito nonlocal

Objetivo: presentar el calificador de ámbito de variable nonlocal.

En la anterior entrega presentamos el concepto de ámbito de una variable y llegamos a una serie de conclusiones:

– Una variable creada en el interior de una función es local y solo existe dentro de ella.

– Las variables creadas a nivel de módulo son globales en el sentido de que son accesibles, además de por el propio módulo, por todas las funciones definidas dentro de él. No obstante, solo son modificables por el propio módulo; las funciones sólo pueden consultar su valor.

– Para modificar una variable global desde dentro de una función es necesario que aparezca declarada como global en el cuerpo de la función.

Vamos a introducir un nuevo nivel de complejidad atendiendo a una característica muy interesante de Python: una función puede incluir definiciones de otras funciones; es decir, la definición de función es anidable.

El Ejemplo 1 ilustra esto de un modo sencillo:

# Ejemplo 1

def f1():
    
    def f2():
        nivel2 = 2
        print(nivel0, nivel1, nivel2)
        
    nivel1 = 1
    f2()
    print(nivel0, nivel1)

nivel0 = 0
f1()
print(nivel0)

Observa que la definición de la función f1() incluye la definición de la función f2().

He definido tres variables en ámbitos distintos: nivel0 a nivel de módulo, nivel1 dentro de la función f1() y nivel2 dentro de f2(), que a su vez está anidada dentro de f1().

Comencemos analizando la función más interior, f2(). En ella se crea la variable local nivel2 y se imprime su valor, junto al de las variables nivel0 y nivel1, que pertenecen, respectivamente, al módulo y al ámbito de f1().

Esto ilustra un concepto importante: una función puede acceder como consulta a todas las variables de los ámbitos en los que está contenida su definición. f2() está contenida en f1(), que a su vez lo está en el módulo principal.

La función f1(), además de definir f2(), crea la variable local nivel1, invoca a f2() e imprime las variables nivel0 y nivel1.

Finalmente, el módulo principal define f1(), crea nivel0, invoca f1() e imprime a continuación el valor de nivel0.

Este es el resultado de la ejecución. Es recomendable que sigas paso a paso su ejecución para asegurarte de que entiendes esta salida.

>>> 
0 1 2
0 1
0

Hay que tener muy claro el sentido de la visibilidad. Desde el módulo principal, cualquier intento de acceder a nivel1 o a nivel2 resultaría en error, del mismo modo que desde f1() tampoco podríamos acceder a nivel2. Por el contrario, en sentido contrario, yendo de menos a más si podemos acceder a las variables, pero solo en modo consulta.

Si desde f1() quisiéramos no solo consultar, sino además modificar el valor de la variable a nivel de módulo, nivel0, ya hemos visto que debemos utilizar el calificativo global, como ilustra el Ejemplo 2:

# Ejemplo 2

def f1():
    
    def f2():
        nivel2 = 2
        print(nivel0, nivel1, nivel2)
        
    nivel1 = 1
    global nivel0
    nivel0 = 5
    f2()
    print(nivel0, nivel1)

nivel0 = 0
f1()
print(nivel0)

>>> 
5 1 2
5 1
5

De igual modo, desde la función más interna, f2(), también podríamos modificar la variable de módulo nivel0 usando el calicativo global:

# Ejemplo 3

def f1():
    
    def f2():
        nivel2 = 2
        global nivel0
        nivel0 = 6
        print(nivel0, nivel1, nivel2)
        
    nivel1 = 1
    f2()
    print(nivel0, nivel1)

nivel0 = 0
f1()
print(nivel0)

>>> 
6 1 2
6 1
6

Y ahora la pregunta del millón… ¿Y si quisiéramos modificar la variable nivel1 desde dentro de f2()?

La respueta NO es global, como se ve en el Ejemplo 4:

# Ejemplo 4

def f1():
    
    def f2():
        global nivel1
        nivel1 = 7
        nivel2 = 2
        print(nivel0, nivel1, nivel2)
        
    nivel1 = 1
    f2()
    print(nivel0, nivel1)

nivel0 = 0
f1()
print(nivel0)

>>> 
0 7 2
0 1
0

Observa con cuidado este resultado: la primera línea corresponde a la impresión de f2(). Como vemos, ha impreso el valor 7, correspondiente a nivel1. Sin embargo, la siguiente línea, que corresponde a la impresión propia de f1(), un instante después, nos demuestra que el valor de nivel1 no ha sido cambiado, manteniendo su valor 1 dentro de f1.

La cuestión es que el calificativo global solo puede usarse para variables globales a nivel de módulo. Para poder modificar la variable a nivel de función nivel1, necesitamos un nuevo calificador: nonlocal.

El código siguiente es exacto al anterior, pero cambiando la palabra global por nonlocal.

# Ejemplo 5

def f1():
    
    def f2():
        nonlocal nivel1
        nivel1 = 7
        nivel2 = 2
        print(nivel0, nivel1, nivel2)
        
    nivel1 = 1
    f2()
    print(nivel0, nivel1)

nivel0 = 0
f1()
print(nivel0)

Esta vez sí: hemos logrado modificar nivel1 desde dentro de f2():

>>> 
0 7 2
0 7
0

En el Ejemplo 6 modificamos, desde dentro de f2() tanto nivel0 como nivel1. Observa el uso combinado de global y nonlocal:

# Ejemplo 6

def f1():
    
    def f2():
        global nivel0
        nonlocal nivel1
        nivel0 = 8
        nivel1 = 9
        nivel2 = 2
        print(nivel0, nivel1, nivel2)
        
    nivel1 = 1
    f2()
    print(nivel0, nivel1)

nivel0 = 0
f1()
print(nivel0)

>>> 
8 9 2
8 9
8

Moraleja: utiliza global para poder modificar una variable creada a nivel de módulo desde dentro de una función definida en ese módulo, aunque esté anidada dentro de otra función; utiliza nonlocal para modificar una variable creada a nivel de función desde otra función definida dentro de aquella.

Javier Montero Gabarró


Python: El calificador de ámbito nonlocal


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Numeros decimales en LaTeX

Objetivo: aprender a escribir correctamente los números decimales en LaTeX.

Escribir números decimales en \LaTeX es una tarea simple, pero has de tener en cuenta ciertas consideraciones importantes.

En primer lugar, debes saber que los números, cuando no formen parte de una expresión algebraica, puedes escribirlos tanto en modo texto como en modo matemático. No obstante, aunque no estén dentro de una fórmula, mi recomendación es que emplees siempre el modo matemático, particularmente cuando tengas que escribir decimales, ya que la presentación puede ser diferente en un modo u otro.

Los siguientes ejemplos ilustran esto con claridad. Escribiremos el número 0,25 empleando como separador el punto, la coma y la comilla y lo haremos tanto en modo texto como en modo matemático:

\documentclass{article}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\begin{document}
Ej 1: Un cuarto es 0.25 de toda la vida.

Ej 2: Un cuarto es $0.25$ de toda la vida.

Ej 3: Un cuarto es 0,25 de toda la vida.

Ej 4: Un cuarto es $0,25$ de toda la vida.

Ej 5: Un cuarto es $0{,}25$ de toda la vida.

Ej 6: Un cuarto es 0'25 de toda la vida.

Ej 7: Un cuarto es $0'25$ de toda la vida.

\end{document}

Esta es la visualización final:

latex-decimales

En los ejemplos 1 y 2 hemos empleado un punto como separador decimal. Observa que en el modo matemático el resultado ha sido cambiado por una coma. Explicaremos este comportamiento en breve.

En los ejemplos 3 y 4 utilizamos la coma como separador decimal. No obstante, en el modo matemático aparece un pequeño e indeseable espacio en blanco adicional. Esto es así porque, en verdad, la coma no está pensada en modo matemático como indicador de decimales, sino como simple signo de puntuación.

Para poder deshacernos de ese incómodo espacio, sería preciso rodear la coma entre llaves, tal como puedes apreciar en el código fuente del ejemplo 5.

Finalmente, en los ejemplos 6 y 7 hemos empleado una comilla como separador, Nuevamente, la presentación es diferente en el modo matemático (la típica «prima») y en el modo texto.

Para evitar esta disparidad entre ambas presentaciones, mi recomendación es que emplees siempre el modo matemático cuando tengas que tratar con números decimales aunque no formen parte de una fórmula.

Lo siguiente que debes tener presente es que, en nuestro idioma, solemos utilizar como separador decimal tanto el punto como la coma. El apóstrofe no suele usarse más que en la escritura a mano.

No voy a entrar a discutir sobre si es mejor utilizar la coma que el punto. Por encima de normas y recomendaciones, lo cierto es que en la literatura científica en nuestro idioma encontrarás ambos tipos de usos. Emplea el que te resulte preferido, pero hazlo consistentemente.

Y ahora el truco importante: para escribir decimales en \LaTeX, utiliza siempre como separador el punto en el código fuente (a pesar de que prefieras usar la coma). Si vuelves a observar el ejemplo 2, aunque en el código fuente está escrito un punto decimal en modo matemático, la presentación final es una coma como separador. Es más, de este modo no aparece el espacio en blanco anexo, por lo que te ahorras el uso de las llaves rodeando el símbolo.

Pero, si hemos dicho que tanto el punto como la coma son de uso común en nuestro idioma, ¿cómo hacemos para que el punto decimal se muestre como un punto en lugar de una coma?

El responsable de ese cambio del punto en el código fuente por la coma en la presentación es el paquete babel que hemos incluido en el preámbulo. Ya sabes que ese paquete se ocupa de facilitar nuestra experiencia \LaTeX en español, adaptando a nuestro idioma elementos como los títulos, la división de las palabras en guiones, etcétera.

Si, pese a que \LaTeX, con su paquete babel, sobreentiende que te gustan las comas decimales, prefieres usar el punto decimal, hay un modo sencillo de hacerlo empleando el siguiente comando:

\spanishdecimal{.}

Entre llaves facilitamos el símbolo que actuará como separador decimal: el punto.

Observa el siguiente ejemplo de uso:

\documentclass{article}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\spanishdecimal{.}
\begin{document}
Ej 8: Un cuarto es $0.25$ de toda la vida.
\end{document}

Aprecia, en la presentación final, que el punto aparece ahora como tal, en vez de la coma:

latex-decimales-2

Para finalizar, un resumen de lo más destacable:

1) Escribe números decimales desde el modo matemático.

2) Utiliza siempre el punto como separador decimal en el código fuente (lo que generará una coma en la presentación).

3) Si prefieres que el separador sea un punto, utiliza el comando \spanishdecimal{.}

Javier Montero Gabarró


Numeros decimales en LaTeX


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice completo de artículos relacionados con \LaTeX.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies