| | | |

Minicurso de Python para Matemáticas

Ajude a manter o site livre, gratuito e sem propagandas. Colabore!

2 Elementos del lenguaje

2.1 Clases de objetos básicos

Python es un lenguaje de programación dinámico en el que los objetos están asociados a clases de datos automáticamente al recibir un valor/dato. Por ejemplo, consideremos las siguientes instrucciones

1x = 2
2y = x * 3.0

En la primera instrucción, la variable x recibe el valor entero 2 y, entonces, se almacena en la memoria del computador como un objeto de la clase int (número entero333Python 3 puede almacenar enteros de cualquier tamaño, limitado solo por la memoria disponible.). En la segunda instrucción, y recibe el valor decimal 6,0 (resultado de 2×3,0) y se almacena como un objeto de la clase float (punto flotante444Un número de la clase float en Python 3 utiliza 64 bits. Esto corresponde al estándar IEEE 754 para representación de números de punto flotante de doble precisión.). Podemos verificar esto con las siguientes instrucciones

1print(x)
2
1print(y)
6.0
1print(type(x), type(y))
<class 'int'> <class 'float'>
Observación 2.1.1.(Comentarios y continuación de línea)

Códigos Python admiten comentarios y continuación de línea como en el siguiente ejemplo

1# esto es un comentario
2s = "esto es una \
3string"
4print(s)
esto es una string
1type(s)
<class 'str'>
Observación 2.1.2.(Notación científica)

Python acepta notación científica. Por ejemplo 5,2×102 se digita de la siguiente forma

15.2e-2
0.052
Observación 2.1.3.(Casting)

Cuando no hay ambigüedad, se puede hacer la conversión entre objetos de clases diferentes (casting). Por ejemplo,

1x = 1
2print(x, type(x))
1 <class 'int'>
1y = float(x)
2print(y, type(y))
1.0 <class 'float'>

Además de objetos numéricos y string, Python también cuenta con objetos list (lista), tuple (n-tupla) y dict (diccionario). Estudiaremos estas clases de objetos más adelante en el minicurso.

Ejercicio 2.1.1.

Antes de implementar, diga cuál es el valor de x después de las siguientes instrucciones.

1x = 1
2y = x
3y = 0

Justifique su respuesta y verifíquela.

Respuesta 0.

1

Ejercicio 2.1.2.

Implemente un código en el que la(o) usuaria(o) entra con valores para las variables x e y. Entonces, los valores de las variables se intercambian entre sí. Consejo: use input para la entrada de datos.

Respuesta 0.
1x = float(input('x = '))
2y = float(input('y = '))
3z = x
4x = y
5y = z
6print('x = ', x)
7print('y = ', y)

2.2 Operaciones aritméticas elementales

Los operadores aritméticos elementales son:

  • + adición

  • - sustracción

  • * multiplicación

  • / división

  • ** potenciación

  • % módulo

  • // división entera

Exemplo 2.2.1.

Estudiamos la siguiente computación

12+8*3/2**2-1
7.0

Observamos que las operaciones ** tienen precedencia sobre las operaciones *, /,  %, //, las cuales tienen precedencia sobre las operaciones +, -. Operaciones de la misma precedencia siguen el orden de izquierda a derecha, conforme se escriben en la línea de comando. Se usan paréntesis para alterar la precedencia entre las operaciones, por ejemplo

1(2+8*3)/2**2-1
5.5

El operador  % módulo computa el resto de la división y el operador // la división entera, por ejemplo

15 % 2
1
15 // 2
2
Observación 2.2.1.(Precedencia de las operaciones)

Consulte más información sobre la precedencia de operadores en Python Docs: Operator Precedence. Las operaciones mencionadas arriba siguen el siguiente orden de precedencia (de mayor a menor):

  • ** (potenciación)

  • +x, -x (positivo, negativo)

  • *, /,  %, // (multiplicación, división, módulo, división entera)

  • +, - (adición, sustracción)

Ejercicio 2.2.1.

Calcule las raíces del siguiente polinomio cuadrático

p(x)=2x22x4 (1)

usando la fórmula de Bhaskara555Bhaskara Akaria, 1114 - 1185, matemático e astrônomo indiano. Fonte: Wikipédia: Bhaskara II..

Respuesta 0.
1a = 2.
2b = -2.
3c = -4.
4dlta = b**2 - 4*a*c
5x1 = (-b - dlta**(1./2))/(2*a)
6x2 = (-b + dlta**(1./2))/(2*a)
7print('x1 = ', x1)
8print('x2 = ', x2)
Ejercicio 2.2.2.

Use Python para calcular los enteros no negativos q y r tales que

25=q3+r, (2)

siendo r lo más pequeño posible.

Respuesta 0.
1q = 25//3
2print('q = ', q)
3r = 25 %3
4print('r = ', r)

2.3 Funciones y constantes elementales

El módulo Python math pone a disposición varias funciones y constantes elementales. Para usarlas, necesitamos importar el módulo en nuestro código

1import math

Con esto, tenemos acceso a todas las definiciones y declaraciones contenidas en este módulo. Por ejemplo

1math.pi
3.141592653589793
1math.cos(math.pi)
-1.0
1math.sqrt(2)
1.4142135623730951
1math.log(math.e)
1.0
Observación 2.3.1.(Función logaritmo)

Notamos que math.log es la función logaritmo natural, i.e. ln(x)=loge(x). La implementación Python para el logaritmo de base 10 es math.log(x, 10) o, más preciso, math.log10.

Ejercicio 2.3.1.

Calcule

  1. a)

    sen(π4)

  2. b)

    elog3(π)

  3. c)

    273

Respuesta 0.
1import math
2# a)
3a = math.sin(math.pi/4)
4print('a) ', a)
5# b)
6b = math.exp(math.log(math.pi, 3))
7print('b) ', b)
8# c)
9c = -(27)**(1/3)
10print('c) ', c)
Ejercicio 2.3.2.

Rehaga el Exercício 2.2.1 usando la función math.sqrt para calcular la raíz cuadrada del discriminante.

Respuesta 0.
1import math
2a = 2.
3b = -2.
4c = -4.
5dlta = b**2 - 4*a*c
6x1 = (-b - math.sqrt(dlta))/(2*a)
7x2 = (-b + math.sqrt(dlta))/(2*a)
8print('x1 = ', x1)
9print('x2 = ', x2)

2.4 Operadores de comparación elementales

Los operadores de comparación elementales son

  • == igual a

  • != diferente de

  • > mayor que

  • < menor que

  • >= mayor o igual que

  • <= menor o igual que

Estos operadores retornan los valores lógicos True (verdadero) o False (falso).

Por ejemplo, tenemos

1x = 2
2x + x == 4
True
Ejercicio 2.4.1.

Considere la circunferencia de ecuación

c:(x1)2+(y+1)2=1. (3)

Escriba un código en el que la(o) usuaria(o) entra con las coordenadas de un punto P=(x,y) y el código verifica si P pertenece al disco determinado por c.

Respuesta 0.
1x = float(input('x = '))
2y = float(input('y = '))
3resp = (x-1.)**2 + (y+1.)**2 <= 1.
4print('?‘P en c?', resp)
Ejercicio 2.4.2.

Antes de implementar, diga cuál es el valor lógico de la instrucción

1math.sqrt(3)**2 == 3

Justifique su respuesta y ¡verifíquela!

Respuesta 0.

False

2.5 Operadores lógicos elementales

Los operadores lógicos elementales son:

  • and y lógico

  • or o lógico

  • not no lógico

Exemplo 2.5.1.

(Tabla Booleana del and.) La tabla booleana666George Boole, 1815 - 1864, matemático britânico. Fonte: Wikipédia: George Boole. del and es

A B A and B
True True True
True False False
False True False
False False False

Por ejemplo, tenemos

1x = 2
2(x > 1) and (x < 2)
False
Ejercicio 2.5.1.

Construya las tablas booleanas del operador or y del not.

Respuesta 0.
1print('A B | A or B')
2print(True, True, '|', True or True)
3print(True, False, '|', True or False)
4print(False, True, '|', False or True)
5print(False, False, '|', False or False)
6
7print('A | not(A)')
8print(True, '|', not(True))
9print(False, '|', not(False))
Ejercicio 2.5.2.

Use Python para verificar si 1,4<=2<1,5.

Respuesta 0.
1import math
2resp = 1.4 <= math.sqrt(2) < 1.5
3print('\u00bf1.4 <= math.sqrt(2) < 1.5 ?', resp)
Ejercicio 2.5.3.

Considere un rectángulo r:ABDC de vértices A=(1,1) y D=(2,3). Cree un código en el que la(o) usuaria(o) informa las coordenadas de un punto P=(x,y) y el código imprime True o False para cada uno de los siguientes elementos:

  1. a)

    Pr.

  2. b)

    Pr.

  3. c)

    Pr¯.

Respuesta 0.
1x = float(input('x = '))
2y = float(input('y = '))
3print('\u00bfP en r', \
4 (1 < x < 2) and (1 < y < 3))
5print('\u00bfP en la frontera', \
6 ((x == 1 or x == 2) and (1 <= y <= 3)) or \
7 (( 1 <= x <= 2) and (y == 1 or y == 3)))
8print('\u00bfP fuera de la clausura', \
9 (x < 1 or x > 2) or (y < 1 or y > 3))
Ejercicio 2.5.4.

Implemente una instrucción para calcular el operador xor (o exclusivo). Dados dos afirmaciones A y B, A xor B es True en el caso de que una, y solo una, de las afirmaciones sea False, en caso contrario es False.

Respuesta 0.

(A or B) and not(A and B)

2.6 set

Un set en Python es una colección de objetos no ordenada, inmutable y no admite elementos duplicados. Por ejemplo,

1a = {1, 2, 3}
2type(a)
<class 'set'>
1b = set((2, 1, 3, 3))
2print(b)
{1, 2, 3}
1a == b
True
1# conjunto vacío
2e = set()

Arriba, asignamos el conjunto a={1,2,3}. Note que el conjunto b es igual a a. Observamos que el conjunto vacío debe ser construido con la instrucción set() y no con {}777Esto construye un diccionario vacío, como estudiaremos pronto..

Observación 2.6.1.(Tamaño de una colección de objetos)

La función len retorna el número de elementos de una colección de objetos. Por ejemplo,

1len(a)
3

Operadores relacionados con conjuntos:

  • - diferencia entre conjuntos

  • | unión de conjuntos

  • & intersección de conjuntos

  • ^ diferencia simétrica

Exemplo 2.6.1.

Los conjuntos

A={2,π,0,25,3,’plátano’}, (4)
B={’naranja’,3,arccos(1),1} (5)

pueden ser asignados como sets

1import math
2A = {2, math.pi, -0.25, 3, 'plátano'}
3B = {'naranja', 3, math.acos(-1), -1}

y, entonces, podemos calcular:

  1. a)

    AB

    1a = A - B
    2print(a)
    {-0.25, 2, 'banana'}
  2. b)

    AB

    1b = A | B
    2print(b)
    {-0.25, 2, 3, 3.141592653589793, 'laranja', 'banana', -1}
  3. c)

    AB

    1c = A & B
    2print(c)
    {3, 3.141592653589793}
  4. d)

    AΔB=(AB)(BA)

    1d = A ^ B
    2print(d)
    {-0.25, 2, 'laranja', 'banana', -1}
Ejercicio 2.6.1.

Asigne como set cada uno de los siguientes conjuntos:

  1. a)

    El conjunto A de los números 12n6 y que son divisibles por 2.

  2. b)

    El conjunto B de los números 12<n6 y que son divisibles por 3.

Entonces, calcule el subconjunto de A y B que contiene solo los números divisibles por 2 y 3.

Respuesta 0.
1A = {-12, -10, -8, -6, \
2 -4, -2, 0, 2, 4, 6}
3B = {-12, -9, -6, -3, \
4 0, 3, 6}
5C = A & B
6print('C = ', C)
Observación 2.6.2.(Comprensión de sets)

Python proporciona la sintaxis de comprensión de sets. Por ejemplo,

1C = {x for x in A if type(x) == str}
2print(C)
{\text{'plátano'}}
Ejercicio 2.6.2.

Considere el conjunto

Z={4,3,2,1,0,1,2,3,4}. (6)

Haga un código Python para extraer el subconjunto 𝒫 de los números pares del conjunto Z. Después, modifíquelo para extraer el subconjunto de los números impares. Consejo: use comprensión de sets.

Respuesta 0.
1Z = {-4, -3, -2, -1, \
2 0, 1, 2, 3, 4}
3P = {p for p in Z if p % 2 == 0}
4print('P = ', P)

2.7 tuple

En Python, tuple es una colección ordenada e inmutable de objetos. Por ejemplo, en la siguiente asignamos un par, una tripla y una cuádrupla ordenada usando tuples.

1a = (1, 2)
2print(a, type(a))
(1, 2) <class 'tuple'>
1b = -1, 1, 0
2print(b, len(b))
(-1, 1, 0) 3
1c = (0.5, 'naranja', {2, -1}, 2)
2print(c)
(0.5, 'laranja', {2, -1}, 2)

Los elementos de un tuple están indexados, el índice 0 corresponde al primer elemento, el índice 1 al segundo elemento y así sucesivamente. De esta forma es posible el acceso directo a un elemento de un tuple usando su posición. Por ejemplo,

1print(c[2])
{2, -1}

También se puede extraer una rodaja (un subconjunto) usando la notación :. Por ejemplo,

1d = c[1:3]
2print(d)
('naranja', {2, -1})

Operadores básicos:

  • + concatenación

    1a = (1, 2) + (3, 4, 5)
    2print(a)
    (1, 2, 3, 4, 5)
  • * repetición

    1b = (1, 2) * 2
    (1, 2, 1, 2)
  • in pertenencia

    1c = 1 in (-1, 0, 1, 2)
    True
Ejercicio 2.7.1.

Use sets para asignar los conjuntos

A={1,0,2}, (7)
B={2,3,5}. (8)

Entonces, compute el producto cartesiano A×B={(a,b):aA,bB}. ¿Cuál es el número de elementos de A×B? Consejo: use la sintaxis de comprensión de sets (consulte la Observação 2.6.2).

Respuesta 0.
1A = {-1, 0, 2}
2B = {2, 3, 5}
3P = {(a,b) for a in A for b in B}
4print('P = ', P)
Ejercicio 2.7.2.

Asigne el gráfico discreto de la función888El gráfico de una función restrita a un conjunto A es el conjunto G(f)|A={(x,y):xA,y=f(x)}. f(x)=x2 para x=0,12,1,2. Consejo: use la sintaxis de comprensión de conjuntos (consulte la Observação 2.6.2).

Respuesta 0.
1X = {0., 0.5, 1., 2.}
2G = {(x, x**2) for x in X}
3print('G = ', G)

2.8 list

Una list es una colección de objetos indexada y mutable. Por ejemplo,

1x = [-1, 2, -3, -5]
2print(x, type(x))
[-1, 2, -3, -5] <class 'list'>
1y = [1, 1, 'hola', 2.5]
2print(y)
[1, 1, 'hola', 2.5]
1vacia = []
2print(len(vacia))
3print(len(y))
0
4

Los elementos de una list están indexados de manera análoga a una tuple, el índice 0 corresponde al primer elemento, el índice 1 al segundo elemento y así sucesivamente. Asimismo, el índice 1 corresponde al último elemento, el 2 al penúltimo y así sigue. Por ejemplo,

1x[-1] = 3.14
2print('x[0] = ', x[0])
3print('x = ', x)
x[0] = -1
x = [-1, 2, -3, 3.14]
1x[:3] = [10, -20]
2print(x)
[10, -20, -3, 3.14]

Los operadores básicos de concatenación y repetición también están disponibles para una list. Por ejemplo,

1x = [1,2] + [3, 4, 5]
2print(x)
3y = [1,2]*2
4print(y)
[1, 2, 3, 4, 5]
[1, 2, 1, 2]
Observación 2.8.1.

list cuenta con varias funciones listas para la ejecución de diversas tareas prácticas como, por ejemplo, insertar/eliminar elementos, contar ocurrencias, ordenar elementos, etc. Consulte en la web Python Docs: More on Lists.

Observación 2.8.2.(Asignación versus copia)

Estudiamos el siguiente ejemplo

1x = [2, 3, 1]
2y = x
3y[1] = 0
4print('x =', x)
x = [2, 0, 1]

En Python, los datos tienen identificación única. Por lo tanto, en este ejemplo, x e y apuntan a la misma dirección de memoria. Modificar y es también modificar x y viceversa. Para desasociar y de x, y necesita recibir una copia de x, como sigue

1x = [2, 3, 1]
2print('id(x) =', id(x))
3y = x.copy()
4print('id(y) =', id(y))
5y[1] = 0
6print('x =', x)
7print('y =', y)
id(x) = 140476759980864
id(y) = 140476760231360
x = [2, 3, 1]
y = [2, 0, 1]
Observación 2.8.3.(Añadir o extender)

Una list tiene tamaño dinámico, permitiendo la adición de un nuevo elemento o su extensión. La adición de un elemento puede ser hecha con el método list.append, mientras que la extensión es hecha con list.extend. Por ejemplo, con el list.append tenemos

1l = [1, 2]
2l.append((3,4))
3print(l)
[1, 2, (3, 4)]

Mientras, que con el list.extend obtenemos

1l = [1, 2]
2l.extend((3,4))
3print(l)
[1, 2, 3, 4]
Ejercicio 2.8.1.

La solución de

x22=0 (9)

puede ser aproximada por la iteración del método babilónico

x0=1, (10)
xi+1=12(xi+2xi) (11)

para i=0,1,2,. Asigne una lista con las cuatro primeras iteradas, i.e. [x0,x1,x2,x3,x4]. Consejo: use list.append.

Respuesta 0.
1x = [1] # x0
2x.append(0.5*(x[-1] + 2./x[-1])) # x1
3x.append(0.5*(x[-1] + 2./x[-1])) # x2
4x.append(0.5*(x[-1] + 2./x[-1])) # x3
5x.append(0.5*(x[-1] + 2./x[-1])) # x4
6print('x = ', x)
Ejercicio 2.8.2.

Asigne cada uno de los siguientes vectores como una list:

x=(1,3,2), (12)
y=(4,2,0). (13)

Entonces, compute

  1. a)

    x+y

  2. b)

    xy

Consejo: use una comprensión de lista y los métodos zip y sum.

Respuesta 0.
1# a)
2x = [-1, 3, -2]
3y = [4, -2, 0]
4xpy = [xy[0]+xy[1] for xy in zip(x,y)]
5print('x + y = ', xpy)
6
7# b)
8dxy = sum([xy[0]*xy[1] for xy in zip(x,y)])
9print('x . y = ', dxy)
Ejercicio 2.8.3.

Una matriz puede ser asignada como un encadenamiento de lists. Por ejemplo, la matriz

M=[1223] (14)

puede ser asignada como la siguiente list

1M = [[1,-2],[2,3]]
2M
[[1, -2], [2, 3]]

Use list para asignar la matriz

A=[121807312] (15)

y el vector

x=(2,3,1), (16)

entonces compute Ax.

Respuesta 0.
1A = [[1,-2,1],
2 [8,0,-7],
3 [3,-1,-2]]
4x = [2,-3,1]
5Ax = [sum([aix[0]*aix[1] for aix in zip(ai, x)]) for ai in A]
6print('Ax = ', Ax)

2.9 dict

Un dict es un mapeo de objetos (un diccionario), en el que cada elemento es un par clave:valor. Por ejemplo,

1a = {'nombre': 'triangulo', 'perimetro': 3.2}
2print(a, type(a))
{'nombre': 'triangulo', 'perimetro': 3.2} <class 'dict'>

El acceso a un elemento del diccionario puede ser hecho por su clave, por ejemplo,

1a['nombre'] = 'triángulo'
2print(a['nombre'])
'triángulo'

Se puede añadir un nuevo par, simplemente, asignando un valor a una nueva clave. Por ejemplo,

1a['vertices'] = {'A': (0,0), 'B': (3,0), 'C': (0,4)}
2print('vértice B =', a['vertices']['B'])
vértice B = (3,0)
Ejercicio 2.9.1.

Considere la función afín

f(x)=3x. (17)

Implemente un diccionario para asignar la raíz de la función, la intersección con el eje y y su coeficiente angular.

Respuesta 0.
1f_dict = {'raiz': 3.,
2 'y_intercep': 3.,
3 'coef_angular': -1.}
4print('raiz = ', f_dict['raiz'])
5print('y_intercep = ', f_dict['y_intercep'])
6print('coef_angular = ', f_dict['coef_angular'])
Ejercicio 2.9.2.

Considere la función cuadrática

g(x)=x2x2 (18)

Implemente un diccionario para asignar sus raíces, vértice e intersección con el eje y.

Respuesta 0.
1g_dict = {'raices': (-1., 2.),
2 'vertice': 0.5,
3 'y_intercep': 2.}
4print('raiz = ', g_dict['raices'])
5print('y_intercep = ', g_dict['y_intercep'])
6print('vertice = ', g_dict['vertice'])

Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Pedro H A Konzen
| | | |