1.6. Glosario

solución de problemas: El proceso de formular un problema, hallar la solución y expresar esa solución.

lenguaje de alto nivel: Un lenguaje como Python diseñado para ser fácil de leer y escribir para la gente.

lenguaje de bajo nivel: Un lenguaje de programación diseñado para ser fácil de ejecutar para un computador; también se lo llama lenguaje de máquina “o lenguaje ensamblador”.

portabilidad: La cualidad de un programa que le permite ser ejecutado en más de un tipo de computador.

interpretar: Ejecutar un programa escrito en un lenguaje de alto nivel traduciéndolo línea por línea

compilar: Traducir un programa escrito en un lenguaje de alto nivel a un lenguaje de bajo nivel todo al mismo tiempo, en preparación para la ejecución
posterior.

código fuente: Un programa escrito en un lenguaje de alto nivel antes de ser compilado.

código de objeto: La salida del compilador una vez que ha traducido el programa.

programa ejecutable: Otro nombre para el código de objeto que está listo para ejecutarse.

guión: Un programa archivado (que va a ser interpretado).

programa: Un conjunto de instrucciones que especifica una computación.

algoritmo: Un proceso general para resolver una clase completa de problemas.

error (bug): Un error en un programa.

depuración: El proceso de hallazgo y eliminación de los tres tipos de errores de programación.

sintaxis: La estructura de un programa.

error sintáctico: Un error en un programa que hace que el programa sea imposible de analizar sintácticamente (e imposible de interpretar).

error en tiempo de ejecución: Un error que no ocurre hasta que el programa ha comenzado a ejecutarse e impide que el programa continúe.

excepción: Otro nombre para un error en tiempo de ejecución.

error semántico: Un error en un programa que hace que ejecute algo que no era lo deseado.

semántica: El significado de un programa.

lenguaje natural: Cualquier lenguaje hablado que evolucionó de forma natural.

lenguaje formal: Cualquier lenguaje diseñado por humanos que tiene un propósito específico, como la representación de ideas matemáticas o programas de computadores; todos los lenguajes de programación son lenguajes formales.

unidad: Uno de los elementos básicos de la estructura sintáctica de un programa, análogo a una palabra en un lenguaje natural.

análisis sintáctico: La examinación de un programa y el análisis de su estructura sintáctica.

sentencia print: Una instrucción que causa que el interprete Python muestre un valor en el monitor.

Anuncios

7.2. Longitud

La función len devuelve el número de caracteres de una cadena:

   1: >>> fruta = "banana"

   2: >>> len(fruta)

   3: 6

Para obtener la última letra de una cadena puede sentirse tentado a probar algo como esto:

   1: longitud = len(fruta)

   2: ultima = fruta[longitud] # ERROR!

Eso no funcionara. Provoca un error en tiempo de ejecucion IndexError:string index out of range. La razon es que no hay una sexta letra en “banana“. Como empezamos a contar por cero, las seis letras estan numeradas del 0 al 5. Para obtener el ultimo caracter tenemos que restar 1 de longitud:

   1: longitud = len(fruta)

   2: ultima = fruta[longitud-1]

De forma alternativa, podemos usar índices negativos, que cuentan hacia atrás desde el final de la cadena. La expresion fruta[-1] nos da la ultima letra. fruta[-2] nos da la penultima, y así.

7.5. Comparación de cadenas

Los operadores de comparación trabajan sobre cadenas. Para ver si dos cadenas son iguales:

   1: if palabra == "banana":

   2: print "S³, no tenemos bananas!"

Otras operaciones de comparacion son utiles para poner palabras en orden alfabético:

   1: if palabra < "banana":

   2:     print "Tu palabra," + palabra + ", va antes de banana."

   3: elif palabra > "banana":

   4:     print "Tu palabra," + palabra + ", va despues de banana."

   5: else:

   6:     print "Sí, no tenemos bananas!"

Sin embargo, deber³a usted ser consciente de que Python no maneja las mayúsculas y minusculas como lo hace la gente. Todas las mayusuculas van antes de la minúsculas. Como resultado de ello:

Tu palabra, Zapato, va antes de banana.

Una forma comun de abordar este problema es convertir las cadenas a un formato estandar, como pueden ser las minusculas, antes de realizar la comparacion.

Un problema mayor es hacer que el programa se de cuenta de que los zapatos no son frutas.

8.2. Acceso a los elementos

La sintaxis para acceder a los elementos de una lista es la misma que para acceder a los caracteres de una cadena: el operador corchetes []. La expresión dentro de los corchetes especifica el índice. Recuerde que los índices siempre comienzan en cero:

   1: print numeros[0]

   2: numeros[1] = 5

El operador [] puede aparecer en cualquier parte de una expresion. Cuando aparece a la izquierda de una asignacion, cambia uno de los elementos de la lista, de manera que el “unesimo” elemento de numeros, que era 123, ahora es 5.

Se puede usar como índice cualquier expresion entera.

   1: >>> numeros[3-2]

   2: 5

   3: >>> numeros[1.0]

   4: TypeError: 

   5: sequence index must be integer

Si intenta acceder (leer o modificar) un elemento que no existe, obtendra un error en tiempo de ejecución:

   1: >>> numeros[2] = 5

   2: IndexError: list assignment index out of 

   3: range

Si se da un índice negativo, se cuenta hacia atras desde el final de la lista.

   1: >>> numeros[-1]

   2: 5

   3: >>> numeros[-2]

   4: 17

   5: >>> 

   6: numeros[-3]

   7: IndexError: list index out of range

   8: numeros[-1] es el ultimo 

   9: elemento de la lista, numeros[-2] es el penultimo, y

  10: numeros[-3] no 

  11: existe.

Es muy habitual usar una varible de bucle como índice para una lista:

   1: jinetes = ["guerra", "hambre", "peste", "muerte"]

   2: i = 0

   3: while i < 4:

   4: print jinetes[i]

   5: i = i + 1

Este bucle while cuenta desde 0 hasta 4. Cuando la variable de bucle vale 4, la condición falla y acaba el bucle. Por tanto, el cuerpo del bucle solo se ejecuta cuando i es 0, 1, 2 y 3.

Cada vez que recorremos el bucle, la variable i se usa como índice de la lista, imprimiendo el elemento i-esimo. Esta plantilla de computacion se llama recorrido de lista.

8.16. Cadenas y listas

Dos de las funciones mas útiles del modulo string tienen que ver con listas de cadenas. La función split divide una cadena en una lista de palabras. Por defecto, cualquier numero de caracteres de espacio en blanco se considera un límite de palabra:

   1: >>> import string

   2: >>> cancion = "La lluvia en Sevilla..."

   3: >>> string.split(cancion)

   4: ['La', 'lluvia', 'en', 'Sevilla...']

Se puede usar un argumento opcional llamado delimitador para especificar que caracteres se usaran como límites de palabra. El siguiente ejemplo usa la cadena ll como delimitador:

   1: >>> string.split(cancion, 'll')

   2: ['La ', 'uvia en Sevi', 'a...']

Observe que el delimitador no aparece en la lista.

La función join es la inversa de split. Toma una lista de cadenas y concatena

los elementos con un espacio entre cada par:

   1: >>> lista = ['La', 'lluvia', 'en', 'Sevilla...']

   2: >>> string.join(lista)

   3: 'La lluvia en Sevilla...'

Como split, join acepta un delimitador opcional que se inserta entre los elementos. El delimitador por defecto es el espacio.

   1: >>> string.join(lista, '_')

   2: 'La_lluvia_en_Sevilla...'

A modo de ejercicio, describa la relación que hay entre
string.join(string.split(cancion)) y canción. ¿Esla misma para todas las cadenas?
¿Cuando sería diferente?