Algo de programación
En esta hora, vamos a ver de forma muy breve algunas nociones de programación en SAGE/Python. En particular, veremos:
Listas y tuplas
Verdad y mentira
Comprensiones de listas (list comprehensions)
Definición de funciones
Instrucciones
for
/while
/if
## Listas y tuplas
En Python/SAGEMATH, las listas se representan entre corchetes cuadrados [...]
. La lista con cero elementos se representa como []
.
File "<ipython-input-11-77796e818169>", line 1
DEFINICION DE LISTAS
^
SyntaxError: invalid syntax
Para una lista l
, sus elementos se llaman l[i]
, contando a partir de cero:
Y se les puede asignar una valor:
También se puede empezar a contar desde el final, con índide -1
:
Y se puede extraer parte de una lista con l[principio:final:salto]
:
Si no se pone principio
o final
, Python emplea unos valores por defecto:
Por ejemplo, la forma más sencilla de darle la vuelta a la lista es:
La función range(m,n,s)
da la lista de enteros empezando por m
, acabando justo antes de n
, y aumentanto de s
en s
.
La longitud de una lista se mide con len
; y es un error extraer un elemento más allá del final (o del principio) de una lista:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-15-fb7291eca45e> in <module>()
----> 1 l[Integer(10)]
IndexError: list index out of range
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-18-8115ce3de616> in <module>()
----> 1 l[-Integer(11)]
IndexError: list index out of range
Las listas tienen una aritmética propia:
SAGE tiene la siguiente extensión:
Una precisión: en Python, las variables funcionan como etiquetas que apuntan a un objeto. En el caso de listas, esto puede ser importante:
Ahora, l2
y l1
apuntan a la misma lista; si cambio una, cambio la otra:
Para hacer una copia distinta de una lista, se hace así:
Ahora l3
es realmente distinta:
Las tuplas, a todos los efectos, son como listas que no se pueden modificar.
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-33-3233919e4a2f> in <module>()
----> 1 l2[Integer(1)] = '2'
TypeError: 'tuple' object does not support item assignment
Otras funciones: borrar un elemento de una lista, añadir elementos a una lista
## List comprehensions
En matemáticas usamos muchas veces construcciones del tipo: Las “comprensiones de listas” ayudan a escribir estas listas de forma natural:
Otro ejemplo: si queremos los primos entre y ,
Verdades y mentiras
En Python/SAGE, existen los valores True
y False
, y las comprobaciones habituales:
Las listas vacías se interpretan como False
, el resto como True
:
Definición de funciones
## if
/for
/while
Sobre esto no hay mucho que decir, salvo la sintaxis:
Veamos ejemplos:
Algunas funciones de SAGE devuelven listas:
Pero también podemos hacer:
Ejercicios
Ejercicio. Escribe una función que imprima las tablas de multiplicar, hasta 10, algo así:
Ejercicio. Escribe un programa que calcule los siguientes 20 años bisiestos. (Hay que saber bien la definición de bisiesto.)
Ejercicio. Escribe un programa que calcule la suma de los elementos de una lista
Ejercicio. Con una compresión de listas, calcula la suma de todos los múltiplos de y que no son múltiplos de menores que 50000.
Ejercicio. Una terna pitagórica es una conjunto de tres entero positivos tal que . Por ejemplo, las ternas pitagóricas cuyas componentes son menores que son:
Construye el conjunto de ternas pitagóricas cuyas componentes son menores que usando comprensiones de listas (con condiciones).
Ejercicio. Escribe un programa que imprima todas las particiones (descendentes) de 10: 9+1, ..., etc. (Difícil.)8+2,8+1+1,
Ejercicio. Lee con detenimiento, paciencia e interés el tutorial de programación de SAGE.