Sunteți pe pagina 1din 35

Programacin bsica con Python

M.C. Oscar Vargas Torres 25 de octubre de 2013

1 Introduccin
1.1 Por qu aprender a programar?
Porque es una habilidad que aumenta tus posibilidades de adquirir un mejor empleo. Para realizar clculos intensos, es necesario utilizar una computadora, pues hacerlos a mano sera muy tardado o imposible. Ejemplos de reas en las que puedes aplicar la programacin: Mtodos numricos: Resuelva de manera numrica (utilizando el mtodo de Euler) el sistema masa-resorte dado por la ecuacin diferencial

mu + u + ku = F (t),

u(0) = U0, u(0) = 0

(1.1)

Figura 1.1: Sistema masa resorte que se describe mediante la Ecuacin 1.1

140 120 100 80 60 40 20 03 2 1 0 1 2 3 4

Figura 1.2: Histograma

Graficacin. La Figura 1.2 muestra un histograma obtenido a partir de una distribucin de probabilidad normal con el siguiente cdigo.
import matplotlib.pyplot as plt import numpy as np x = np.random.randn(1000) plt.hist(x, 20) plt.show()

1.2 Python como primer lenguaje de programacin


Se ha escogido Python como un lenguaje de programacin porque combina capacidadades notables con una sintxis limpia, simple y compacta. Enunciamos algunas caractersticas de Python: Python es fcil de aprender y es muy apropiado para un curso introductorio de programacin. Es muy similar a Matlab y un buen lenguaje para hacer cmputo matemtico. Es fcil de combinar con lenguajes compilados como Fortran, C y C++, que son lenguajes ampliamente usados para cmputo cientfico.

1.3 Instalacin de software utilizado en el curso


Se requiere: WinPython 3.3 Puedes descargarlo e instalarlo de aqu

2 Python bsico
Para iniciar con lo ms bsico, te recomiendo estudiar el Tutorial de Python (no es necesario que revises todo el tutorial, pero si es importante que empieces lo ms pronto posible, y que vayas practicando cada tema que se vea en clase) en http://docs.python.org/3/tutorial/index.html (este tutorial est en ingls, pero es el tutorial adecuado para la versin de Python que estaremos usando en el curso). Tambin puedes apoyarte en una versin del tutorial en espaol disponible en http://docs.python.org.ar/tutorial/3/index.html. Especialmente importantes son las secciones 1 a 5 del tutorial. Asegrate de estudiar al menos estas secciones del tutorial.

2.1 Prctica 1: Instalacin de software


1. Descarga WinPython de aqu y ejecuta el instalador. Verifica primero si tienes una computadora con un sistema operativo de 64 bits o de 32 bits y descarga la versin ms apropiada para ti. Si tienes dudas, pregunta a tu profesor cmo averiguar esto. Otra opcin que tienes es descargar la versin de 32 bits, que puede ejecutarse en los dos tipos de computadoras. 2. Estudia con tu computadora el tutorial de Python, mencionado anteriormente. En otras palabras, ejecuta en tu computadora las instrucciones que se dan en esta seccin a la vez que vas leyendo el tutorial. Anota las dudas que tengas para que puedas preguntar ms adelante a tu profesor.

2.2 Prctica 2: Tipos de datos


Estudia los tipos de datos nativos que soporta Python 3.

2.3 Prctica 3: Expresiones y operadores


1. Considere el movimiento vertical de una pelota que se lanza al aire. Dicho movimiento est dado por la frmula

1 y (t) = v0(t) gt2 2

(2.1)

Con ayuda del siguiente bloque de cdigo, verifica la posicin de la pelota a los 0.6 segundos de ser lanzada, si la velocidad inicial con que fue lanzada es de 6 m/s:
# Programa para calcular la altura de una # pelota en movimiento vertical v0 = 5 # velocidad inicial g = 9.81 # aceleracion de la gravedad t = 0.6 # tiempo y = v0*t - 0.5*g*t**2 # posicion vertical print(y)

Cules son los operadores que utilizas para la multiplicacin y para la exponenciacin? 2. Considere el movimiento vertical de la pelota dado por la Ecuacin (2.1). Cunto tiempo le toma a la pelota alcanzar la altura yc ? Comprueba que las soluciones estn dadas por las races de la ecuacin
1 2 gt 2

v0 t + y c = 0

Usando la frmula general para encontrar las races de una ecuacin de segundo grado, comprueba que las soluciones son:

( ) 2 t1 = v0 v0 2gyc /g,

( ) 2 t2 = v0 + v0 2gyc /g

Utilizando el siguiente bloque de cdigo, averigua cules son los dos instantes de tiempo en que una pelota est a una altura de 0.3 m, si la velocidad inicial de la pelota es de 6 m/s:

v0 = 5 g = 9.81 yc = 0.2 import math t1 = (v0 - math.sqrt(v0**2 - 2*g*yc))/g t2 = (v0 + math.sqrt(v0**2 - 2*g*yc))/g print("""En t={0:.4f} s y t={1:.4f} s, la altura es {2:.4f} m.""".format(t1, t2, yc))

3. Revisa los siguientes links http://docs.python.org/3/library/numeric.html http://docs.python.org/3/library/math.html 4. Utilizando el siguiente bloque de cdigo, indica cules son los valores que toma la variable v:
import math as m # m is now the name of the math module v = m.sin(m.pi) from math import log as ln v = ln(5) from math import sin as s, cos as c, log as ln v = s(x)*c(x) + ln(x)

5. Con ayuda del siguiente cdigo, calcula las dos races complejas de la ecuacin cuadrtica f (x) = ax2 + bx + c cuando a = 1, b = 2 y c = 100:
>>> a = 1; b = 2; c = 100 # coeficientes polinomiales >>> from numpy.lib.scimath import sqrt >>> r1 = (-b + sqrt(b**2 - 4a*c))/(2*a) >>> r2 = (-b - sqrt(b**2 - 4a*c))/(2*a)

2.4 Prctica 4: Procedimientos y funciones


1. Introduce la siguiente funcin en WinPython (o en IDLE, emacs, o el editor de tu preferencia):
def mi_funcion(param1, param2): print(param1) print(param2)

2. Llama la funcin anterior con los argumentos 3 "Hola" Cul es el tipo de estos argumentos? Utiliza la funcin type(). 3. Convierte de metros a unidades de longitud inglesas. Construye un programa que reciba una longitud en metros y que entonces calcule y depliegue la correspondiente longitud en pulgadas, pies y millas. Utiliza las siguientes equivalencias: 1 pulgada = 2.54 cm 1 pie = 12 pulgadas 1 yarda = 3 pies 1 milla inglesa = 1760 yardas Como verificacin puede usar los siguientes datos: 640 m = 25196.85 pulgadas = 2099.74 pies = 699.91 yardas = 0.3977 millas inglesas 4. Modifica (en caso de ser necesario) el programa del ejercicio anterior de modo que utilices funciones para resolver el problema propuesto. 5. Basndote en el siguiente cdigo, calcula el rea de un paralelogramo, de un cuadrado y de un crculo, as como el volumen de un cono utilizando funciones:

10

from math import pi h = 5.0 # altura b = 2.0 # base r = 1.5 # radio area_paralelogramo = h*b print("El area del paralelogramo es {0:.3f}". format(area_paralelogramo)) area_cuadrado = b**2 print("El area del cuadrado es {}". format(area_cuadrado)) area_circulo = pi*r**2 print("El area del circulo es {0:.3f}". format(area_circulo)) volumen_cono = 1.0/3*pi*r**2*h print("El volumen del cono es {0:.3f}". format(volumen_cono))

11

2.5 Prctica 5: Estructuras Selectivas


Estudia las pginas 29 a 31 del libro Python para todos.
2.5.1 Ejemplo 1

Construya un diagrama de flujo (vea la Figura seleccion-simple) tal que dado como dato la calificacin de un alumno en un examen, escriba aprobado en caso de que esa calificacin sea mayor o igual a 70.

Figura 2.1: Seleccin simple

El siguiente cdigo imprime Aprobado:

12

cal = 80 if cal >= 70: print("Aprobado")

2.5.2 Ejemplo 2

Construya un diagrama de flujo (vea la Figura seleccion-doble) tal que dado como dato la calificacin de un alumno en un examen, escriba aprobado si su calificacin es mayor o igual a 70 y reprobado en caso contrario.

Figura 2.2: Seleccion doble

El siguiente cdigo imprime Reprobado:

13

cal = 60 if cal >= 70: print("Aprobado") else: print("Reprobado")

2.5.3 Ejemplo 3

Construya un diagrama de flujo tal que dado como datos la categora y el sueldo de un trabajador, calcule el aumento correspondiente teniendo en cuenta el Cuadro 2.1. Imprima la categora del trabajador y su nuevo sueldo. El siguiente cdigo resuelve el ejemplo:
cat = 2 sue = 1000 if cat == 1: n_sue = sue * 1.15 elif cat == 2: n_sue = sue * 1.10 elif cat == 3: n_sue = sue * 1.08 else: n_sue = sue * 1.07 print("La categoria del trabajador es {}".format(cat)) print("El nuevo sueldo es {}".format(n_sue))

Cul es el salario del trabajador (considerando que el salario actual es de $1000.00) para cada categora?

14

Categora % Aumento 1 2 3 4 15 10 8 7

Cuadro 2.1: Aumento salarial segn la categora.

15

2.6 Prctica 6: Estructuras repetitivas


Estudia las pginas 32 a 35 del libro Python para todos

2.6.1 Ejemplo 1: Conversin de temperaturas

Imprima una tabla de conversin de grados Celsius a grados Fahrenheit. Dicha tabla debe verse como el Cuadro 2.2:

Celsius Fahrenheit -20 -15 -10 -5 0 5 10 15 20 25 30 35 40 -4.0 5.0 14.0 23.0 32.0 41.0 50.0 59.0 68.0 77.0 86.0 95.0 104.0

Cuadro 2.2: Conversin de grados Celcius a grados Fahrenheit

El siguiente cdigo resuelve el ejemplo:

16

print("------------------") # Encabezado de la tabla C = -20 # valor inicial de C dC = 5 # incremento de C en el ciclo while C <= 40: # mientras C sea menor o igual que 40, hacer F = (9.0/5)*C + 32 print("{0}, {1}".format(C, F)) C = C + dC print("------------------") # Fin de la tabla

Podemos construir una lista de las temperaturas con el siguiente cdigo:


Cdegrees = [] for C in range(-20, 45, 5): Cdegrees.append(C)

List Comprehension

Dado que recorrer una lista elemento a elemento y por cada uno de ellos crear otro nuevo en una lista distinta es una tarea frecuente, Python tiene una sintaxis compacta para hacer esto, llamada list comprehension. La sintaxis general es:
new_list = [E(e) for e in list]

donde E(e) representa una expresin que envuelve al elemento e. A continuacin ponemos varios ejemplos:
Cdegrees = [-5 + i*0.5 for i in range(n)] Fdegrees = [(9.0/5)*C + 32 for C in Cdegrees]

La tabla anterior puede construirse con un ciclo for:


table = [] for C, F in zip(Cdegrees, Fdegrees): table.append([C, F])

17

Una versin ms pythonica del ciclo anterior se consigue utilizando una list comprehension:
table = [[C, F] for C, F in zip(Cdegrees, Fdegrees)]

2.6.2 Ejemplo 2: Sumatorias

Las sumatorias ocurren con frecuencia en las matemticas. Por ejemplo, la funcin sin(x) puede calcularse como un polinomio:

x3 x5 x7 sin(x) x + + 3! 5! 7!

(2.2)

donde 3! = 3 2 1, 5! = 5 4 3 2 1, etc. son factoriales. La expresin k ! puede calcularse con math.factorial(k). Se requiere de un nmero infinito de trminos en el lado derecho de la Ecuacin (2.2) para que sea vlido usar el signo de igualdad. Con un nmero finito de trminos, se obtiene una aproximacin de la funcin sin(x). Suponga que es necesario calcular el lado derecho de la Ecuacin (2.2) para potencias de hasta N = 25. El clculo de la suma anterior con un ciclo while de Python, utiliza lo siguiente: 1. Un contador k que toma los valores impares desde 1 hasta un algn nmero mximo N. 2. Una variable para la sumatoria, digamos sumatoria, que acumule los trminos, uno a la vez. El propsito de cada iteracin del ciclo es calcular un nuevo trmino y aadirlo a sumatoria. Dado que el signo de cada trmino se alterna, podemos introducir una variable signo que cambie entre 1 y 1 en cada iteracin del ciclo. Las ideas anteriores pueden codificarse en Python de la siguiente manera:

18

x = 1.2 # asignar algn valor N = 25 # maxima potencia en la suma k = 1 sumatoria = x signo = 1.0 import math while k < N: signo = - signo k = k + 2 term = signo * x**k / math.factorial(k) sumatoria = sumatoria + term print("sin({0:g}) = {1:g} (aproximacin con N = {2:d})". format(x, sumatoria, N)) print("Valor real = {0:g}".format(math.sin(x)))

2.6.3 Ejemplo 3: Series de Fourier

Sea f (t) una funcin definida en un intervalo (a, a + T ), donde a R y T > 0 es el periodo de la funcin. f (t) puede escribirse como

) )] ( ( [ a0 2nt 2nt f (t) = + an cos + bn sin 2 T T n=1

(2.3)

Para encontrar los coeficientes a0 , an y bn , se utilizan las siguientes frmulas:

2 a+T a0 = f (t) dt T a ) ( 2 a+T 2nt dt an = f (t) cos T a T ) ( a+T 2 2nt bn = dt f (t) sin T a T

(2.4)

19

El uso ms frecuente de la serie de Fourier es para representar funciones peridicas. Lo que se hace es definir la funcin para un intervalo (a, a + T ) con una serie de Fourier. El resultado es una funcin definida en todo el eje real. El valor a0 /2 siempre da el valor promedio de la funcin. El valor que da la serie geomtrica de Fourier para los valores en que la funcin presenta discontinuidades es el valor promedio de la funcin. Un desarrollo en serie de Fourier para f (t) definida de acuerdo con la figura

3 2 1 0 1 2 0.0

0.5

1.0

1.5

2.0

Figura 2.3: Funcin escalonada

20

import matplotlib.pyplot as plt import numpy as np x1 = np.array([0.0, 1.0]) y1 = np.array([2.0, 2.0]) x2 = np.array([1.0, 2.0]) y2 = np.array([-1.0, -1.0]) plt.plot(x1, y1, 'b', x2, y2, 'b') plt.axis([0.0, 2.0, -2.0, 3.0]) plt.grid() plt.show()

est dado por las siguientes expresiones:

a0 = 1 an = 0 3 n bn = [1 (1) ] n T =2
es decir, la solucin es:

(2.5)

1 3 n f (t) = + [1 (1) ] sin(nt) 2 n=1 n 1 6 = + sin [(2n 1)t] 2 n=1 (2n 1) 1 6 sin [(2n 1)t] = + 2 n=1 2n 1

(2.6)

La sumatoria de la Ecuacin (2.6) es la parte de la expresin que parece ms complicada de entender. Tal vez, la sumatoria pueda parecerte ms fcil de comprender si se reescribe como:
sin [(2n 1)t] n=1

2n 1

sin t

sin 3t

sin 5t

sin 7t

21

2.5 2.0 1.5 1.0 0.5 0.0 0.5 1.0 1.5 2 1 0 1 2 3 4

Figura 2.4: Primeros tres trminos de la serie de Fourier de la Ecuacin (2.6) y su suma

La Figura 2.4 se obtiene utilizando los primeros 3 trminos de la sumatoria de la ltima expresin para f (t):

22

# Qu es lo que hace cada una de las tres sentencias siguientes? import matplotlib.pyplot as plt import numpy as np from numpy import pi num_puntos = 301 # Qu hace la funcin np.linspace()? # Cuntos valores se almacenan en t? # Cul es el tipo de datos de la variable t? t = np.linspace(-2.0, 4.0, num_puntos) # Qu hace la funcin np.zeros()? # Cuntas dimensiones tiene la variable f? # Cuntos valores puede almacenar f? # De qu manera indexas cada elemento de f? f = np.zeros((3, num_puntos)) # Cuntas iteraciones se realizan en el siguiente bloque for? # Qu es lo que repite cada iteracin del ciclo? for n in range(3): # Cules son los valores que toma la variable impar durante cada iteracin? impar = 2*n + 1 # Cul es el tipo de datos de las variables theta? # Cuntos valores almacena la variable theta? theta = impar*pi*t # Qu indica la notacin f[n]? # Qu tamao tiene f[n] (para cada valor de n)? f[n] = np.sin(theta)/impar # Qu es lo que se est graficando en la siguiente instruccin? # Cuntas grficas se estn haciendo con la siguiente instruccin? plt.plot(t, f[n]) # Qu es lo que hace f.sum(0)? y = 0.5 + 6.0/pi*f.sum(0) # Qu es lo que se est graficando en la siguiente lnea? plt.plot(t, y) plt.grid() plt.show()

Modifique el programa anterior para visualizar la seal peridica que se obtiene al sumar los primeros diez trminos de la serie. Despus visualize la seal correspondiente a 100 trminos.

23

2.6.4 Ejemplo 4: Ley de van der Waals

Calcular el volumen ocupado por dos moles de amoniaco que se encuentran a 27 C y a 9.33 atm (realizar el clculo utilizando la ecuacin de Van der Waals). La ecuacin de van der Waals es:

( ) an2 p + 2 (V nb) = nRT V

(2.7)

donde p es la presin del gas; V es el volumen; T es la temperatura; n es el nmero de moles; R es la constante universal de los gases ideales (R = 0.0820578 L-atm/mol-K); a y b son constantes que dependen del gas. Despejar la presin o la temperatura de la Ecuacin (2.7) es sencillo, pero no es fcil averigar el volumen cuando se conocen la temperatura y la presin. Desarrollando las multiplicaciones apropiadas, la ecuacin anterior puede expresarse como el polinomio de tercer grado en V : pV 3 n(RT + bp)V 2 + n2aV n3ab = 0 (2.8) Existe una forma de calcular de manera exacta la solucin a polinomios cbicos, pero aprovecharemos este ejercicio para utilizar un mtodo numrico: el mtodo de Newton-Raphson para encontrar races de ecuaciones no lineales. En palabras simples, si xi es una aproximacin a una raz de f (x) = 0, entonces es posible que una mejor aproximacin est dada por la frmula:

xi+1 = xi

f ( xi ) f ( xi )

(2.9)

donde f (x) denota la derivada de f (x) con respecto a x. En la Ecuacin (2.8), la variable independiente es V (f (V ) = 0), por lo que la iteracin de NewtonRaphson (2.9) est dada por:

Vi+1 = Vi

f (Vi ) f (Vi )

(2.10)

Cul es la derivada f (V )? Utiliza el siguiente cdigo como punto de partida para resolver el problema anterior. Notas: Entradas

24

f es la funcion de iteracion df es la derivada de f p0 es la aproximacion inicial a un cero de f delta es la tolerancia para la diferencia entre un valor de la iteracion y el valor de la iteracion anterior epsilon es la tolerancia para los valores de la funcion num_max_iteraciones es el numero maximo de iteraciones

Salidas err es la diferencia entre dos terminos consecutivos P es la sucesion {pn } completa i es el numero de iteraciones realizadas P[i] es la aproximacion al punto fijo

25

import numpy as np def newton_raphson(f, df, p0, delta, epsilon, num_max_iteraciones): P = np.zeros(num_max_iteraciones + 1) P[0] = p0 for i in range(num_max_iteraciones): P[i + 1] = P[i] - f(P[i])/df(P[i]) err = abs(P[i + 1] - P[i]) error_relativo = 2*err/(abs(P[i + 1]) + delta) y = f(P[i + 1]) if (err < delta or error_relativo < delta or abs(y) < epsilon): break if (i == num_max_iteraciones): print('Se ha excedido el numero de iteraciones') return P, i, error_relativo def f(x): return ((2*x - 11.7)*x def df(x): return (6.0*x - 23.4)*x + 17.7 P, i, error_relativo = newton_raphson(f, df, 3.0, 0.001, 0.0001, 10) + 17.7)*x - 5.0

Utilizando el mtodo newton del mdulo scipy.optimize:

26

def f(x): return ((2*x - 11.7)*x def df(x): return (6.0*x - 23.4)*x + 17.7 from scipy.optimize import newton zero = newton(f, 3.0, df) print(zero) + 17.7)*x - 5.0

27

2.7 Ejercicios de calentamiento


1. Construya un diagrama de flujo tal que dado como dato un nmero entero, determine e imprima si el mismo es positivo, negativo o cero. Utilice la estructura de seleccin multiple. Despus codifique su solucin en Python. 2. En una tienda efectan un descuento a los clientes dependiendo del monto de la compra. El descuento se efecta con base en el siguiente criterio: Si el monto es menor que $500.00, no hay descuento. Si el monto est comprendido entre $500.00 y $1,000.00 (inclusive), 5% de descuento. Si el monto est comprendido entre $1,000.00 y $7,000.00 (inclusive), 7% de descuento. Si el monto est comprendido entre $7,000.00 y $15,000.00 (inclusive), 11% de descuento. Si el monto es mayor a $15,000.00, 18% de descuento. Construya un diagrama de flujo que ilustre la solucin del ejercicio. Despus codifique su solucin en Python. Ayuda: Responde las siguientes preguntas en tu libreta, utilizando las operaciones elementales nicamente (suma, resta, multiplicacin y divisin). Puedes utilizar una calculadora. Cmo se calcula el porcentaje? Calcula el 7% de $3,500.00. Si el monto de tu compra es de $3,500.00 cunto pagaras si te hacen el 7% de descuento? Describe con palabras el procedimiento que utilizaste para responder a las preguntas anteriores. Despus, trata de utilizar el lenguaje Python para realizar el mismo procedimiento. 3. En un estudio se ha hecho un estudio sobre los pacientes registrados durante los ltimos 10 aos, con el objeto de hacer una aproximacin de los costos de internacin por paciente. Se obtuvo un promedio diario segn el tipo de

28

enfermedad que aqueja al paciente. Adems se pudo determinar que en promedio todos los pacientes con edad entre 14 y 22 aos implican un costo adicional del 10%. El Cuadro 2.3 expresa los costos diarios, segn el tipo de enfermedad. Construya un programa en Python que calcule e imprima el

Tipo de enfermedad Costo/paciente/da 1 2 3 4 25 16 20 32

Cuadro 2.3: Costos de hospitalizacin por da segn el tipo de enfermedad.

costo total que representa un paciente (pista: considere el nmero de das que el paciente permanece internado). 4. Escriba un programa que genere todos los nmeros impares desde 1 hasta n. Fije un valor para n al inicio del programa y use un ciclo while para calcular los nmeros. Asegrese de que si n es un nmero par, el nmero impar ms grande generado es n - 1. Nombre del programa: impar.py. Ayuda: Revisa bien las notas en busca de ejemplos que utilicen la estructura repetitiva while. Estudia dichos ejemplos y ejectalos en el WinPython. Recuerda que debes respetar la indentacin para evitar errores ocasionados por no acomodar bien tu cdigo. Supn que n = 5. Entonces tu programa debera dar como resultado la secuencia de nmeros impares 1, 3, 5. Si n = 10, la secuencia debera ser 1, 3, 5, 7, 9. Cmo calculas mentalmente el siguiente nmero impar en la secuencia? Esa misma operacin es la que la computadora debe efectuar para

29

obtener el siguiente nmero impar. 5. Modifique el programa del ejercicio 4 y almacene los nmeros impares generados en una lista. Empiece con una lista vaca y use un ciclo while donde en cada iteracin del ciclo agregue un nuevo elemento a la lista. Finalmente, imprima la lista de elementos en la pantalla. Nombre del programa: lista_impares1.py. Ayuda: Revisa el segundo ejemplo de la pgina 17. 6. Resuelva el ejercicio 5 utilizando una list comprehension (con for y range). Nombre del programa: lista_impares2.py. 7. (Calculo de una sumatoria) Se supone que el siguiente cdigo calcule la suma

s=

M =100 k =1

1 k

s = 0 k = 1 M = 100 while k < M: s += 1/k print(s)

Este programa no funciona correctamente. Cules son los tres errores? Si usted intenta ejecutar el programa, nada suceder en la pantalla. Teclee CtrlC, es decir, presione (y deje presionada) la tecla Control (Ctrl) y entonces teclee la letra c, para detener el programa. Escriba un programa correcto. Nombre del programa: suma_while.py. Hay dos formas bsicas de encontrar errores en el programa: a) Lea el programa cuidadosamente y piense en las consecuencias de cada instruccin b) Imprima resultados intermedios y compare con los clculos manuales

30

Primero, intente el mtodo (a) y encuentre tantos errores como pueda. Entonces, intente el mtodo (b) para M = 3 y compare la evolucin de s con sus propios clculos manuales. Nota: Una forma pythonica de resolver este problema es mediante:
print(sum(1.0/k for k in range(1, M+1, 1)))

8. El siguiente programa grafica la funcin trigonomtrica sin(x)


import matplotlib.pyplot as plt import numpy as np from numpy import pi x = np.linspace(-2*pi, 2*pi, 101) y = np.sin(x) plt.plot(x, y) plt.grid() plt.show()

Suponga que desea calcular la funcin seno inversa: arcsin(x). El mdulo numpy tiene una funcin para calcular dicha funcin, pero cul es el nombre de esta funcin? Grafique esta funcin en el dominio adecuado. Ayuda: Revisa un libro de matemticas que te ayude a recordar el concepto de dominio de una funcin. Despus averigua cul es el dominio de la funcin arcsin(x). 9. Sea:
q = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h']]

Indexe esta lista para extraer a) La letra a b) La lista ['d', 'e', 'f'] c) El ltimo elemento h d) El elemento d

31

e) Explique por qu q[-1][-2] tiene el valor g. Nombre del programa: index_nested_list.py 10. Construya un doble loop sobre una lista anidada. Considere la lista del ejercicio 9. Es posible visitar todos los elementos de q usando el siguiente for loop anidado:
for i in q: for j in range(len(i)): print i[j]

Cul es el tipo de las variables i y j? 11. Reescriba la generacin de la lista anidada q:


q = [r**2 for r in [10**i for i in range(5)]]

utilizando ciclos estndar for en lugar de list comprehensions. Ayuda: Estudia el cdigo sustituyendo la expresin interna (una list comprehension) por la lista que genera. 12. Grafique la siguiente funcin utilizando matplotlib

0 x N ( x) = 2x 0

si x < 0 si 0 x < 1 si 1 x < 2 si x 2

Ayuda: Primero grafica la funcin en tu libreta, para que tengas una idea de cmo debe verse el resultado generado por computadora. Despus estudia el cdigo que se utiliz para producir la Figura 2.3 y utiliza este como base para tu propia grfica.

32

13. Un desarrollo en serie de Fourier para la funcin dada por:

f ( t) =

0, t , 2

si 0 < t < si
2

<t<

3 t, si < t < 32 2 0, si 32 < t < 2

donde el periodo es T = 2 , est dado por:

4 [ ( n )] 2 n an = 2 (1) cos n 2 bn = 0 a0 =
es decir, la solucin es:
( n )] 2 [ n (1) cos cos(nt) f ( t) = + 8 n=1 n2 2 ( n )] 2 1 [ n = + (1) cos cos(nt) 8 n=1 n2 2

Grafique la serie anterior con 100 trminos. Ayuda: Estudia cuidadosamente el ejemplo de la Seccin 2.6.3. Haz un esfuerzo por responder las preguntas planteadas en el cdigo del ejemplo y despus intenta utilizar dicho cdigo como una base para resolver este problema.

2.8 Ejercicios de evaluacin


1. La lista edades = [20, 18, 17, 19, 40, 30] contiene las edades de 6 personas. Construya una lista de valores booleanos (recuerda que en Python, un valor booleano puede ser True o False) a partir de la lista edades que diga si la persona puede votar o no (se necesita ser mayor de edad para votar).

33

a) Resuelva el problema utilizando una comprensin de lista. b) Resuelva el problema utilizando un ciclo for y una estructura de seleccin doble. Ayuda: La salida generada en ambos casos debe ser
[True, True, False, True, True, True]

2. Escriba un programa que imprima: Tarifa menor, si la edad de una persona es mayor que 6 y menor que 16. Tarifa mayor, si la edad de la persona es mayor que 6 pero no menos que 16. Gratis, si la edad de la persona no es mayor que 6. 3. Escriba un programa que reciba como entrada un salario y que determine el impuesto que debe pagar, de acuerdo con las siguientes reglas: Si los ingresos son menores o iguales a $10,000.00 no se pagan impuestos. Si los ingresos son mayores de $10,000.00 pero menores o iguales a $50,000.00 se paga un impuesto de 20 %. Si los ingresos son mayores a $50,000.00, se paga un impuesto de 30 %. 4. Escriba un programa que reciba un nmero del 1 al 7 y que imprima en la pantalla el da correspondiente de la semana (empezando con el Lunes). 5. Escriba un programa que recibe dos enteros positivos, ambos menores o iguales a 10 y que obtiene su producto (multiplicacin) utilizando nicamente sumas. Utilice un ciclo for para resolver el problema. 6. Utilice ciclos for anidados para imprimir en pantalla el siguiente patrn:
A A A A A A A A A A A A A A A A A A A A

34

7. Escriba un programa qpara mostrar en pantalla 10 nmeros aleatorios mediante un ciclo. Use el mtodo random.random() para generar un nmero aleatorio x tal que 0 x < 1.0. 8. Escriba un programa que muestre una tabla de multiplicar, como la que utilizan los nios. Por ejemplo, la tabla para los nmeros del 1 al 6 es: 1 2 3 4 5 6 1 1 2 3 4 5 6 2 2 4 6 8 10 12 3 3 6 9 12 15 18 4 4 8 12 16 20 24 5 5 10 15 20 25 30 6 6 12 18 24 30 36 El programa debe ser capaz de mostrar una tabla de un tamao menor que 20 columnas, especificada mediante un entero.

35

S-ar putea să vă placă și