Download 1 - WordPress.com

Document related concepts
no text concepts found
Transcript
1. Introducción al lenguaje Python
Relación entre las sentencias en Python y el lenguaje C
((¡Hola, mundo!)) en Python
((¡Hola, mundo!)) en lenguaje C
print ’Hello, world!’
#include <stdio.h>
int main(void) {
printf("Hello, world!\n");
return 0;
}
Python presenta una serie de ventajas que lo hacen muy atractivo, tanto para su uso
profesional como para el aprendizaje de la programación. Entre las más interesantes
desde el punto de vista didáctico tenemos:
a) Python es un lenguaje muy expresivo, es decir, los programas Python son muy
compactos.
b) Un programa Python suele ser bastante más corto que su equivalente en lenguajes
como C. (Python llega a ser considerado por muchos un lenguaje de programación de muy
alto nivel).
c) Python es muy legible. La sintaxis de Python es muy elegante y permite la escritura de
programas cuya lectura resulta más fácil que si utilizaremos otros lenguajes de
programación.
d) Python ofrece un entorno interactivo que facilita la realización de pruebas y ayuda a
despejar dudas acerca de ciertas características del lenguaje.
e) El entorno de ejecución de Python detecta muchos de los errores de programación que
escapan al control de los compiladores y proporciona información para detectarlos y
corregirlos.
f) Posee un extenso juego de estructuras de datos que se pueden manipular de modo
sencillo.
2. Programación en Python
He aquí dos programas que calculan la media de tres números en un lenguaje de alto nivel
típico
a=5
b = 10
c=6
media = (a + b + c) / 3
print ‘lLa media es:’, media
Las tres primeras líneas definen los tres valores y la cuarta calcula la media.
a = float(raw_input(’Dame un n´umero:’))
b = float(raw_input(’Dame otro n´umero:’))
c = float(raw_input(’Y ahora, uno m´as:’))
media = (a + b + c) / 3
print ’La media es’, media
1
¿Qué diferencia existe entre ambos programas?
3. Algunos programas en Python
pi = 3.14159265359
r = 1.298373
perimetro = 2 * pi * r
area = pi * r**2
print (‘El perimetro es’), perimetro
print (‘El area es’), area
from math import pi
radio = 1
perimetro = 2 * pi * radio
print perimetro
# Cálculo de raiz cuadrada
from math import sqrt
numero = 4
sqrt (numero)
¿Qué ocurriría si la variable es un número negativo?
a) Calculo del volumen de una esfera
from math import pi
radio = 1
volumen = 4.0 / 3.0 * pi * radio ** 3
print volumen
b) Si se desea calcular ahora el volumen de una esfera de 3 metros de radio
from math import pi
radio = 3
volumen = 4.0 / 3.0 * pi * radio ** 3
print volume
c) Volumen de una esfera (1)
from math import pi
texto_leido = raw_input()
radio = float(texto_leido)
volumen = 4.0 / 3.0 * pi * radio ** 3
print volumen
d) Volumen de una esfera (2)
2
from math import pi
radio = float(raw_input(’Dame el radio: ’))
volumen = 4.0 / 3.0 * pi * radio ** 3
print volume
Ejercicios:
a) Diseña un programa que, a partir del valor del lado de un cuadrado (3 metros), muestre
el valor de su perímetro (en metros) y el de su área (en metros cuadrados).
(El perímetro debe darte 12 metros y el área 9 metros cuadrados.)
b) Diseña un programa que, a partir del valor de la base y de la altura de un triángulo (3
y 5 metros, respectivamente), muestre el valor de su área (en metros cuadrados).
Recuerda que el área A de un triángulo se puede calcular a partir de la base b y la altura h
como A = ½ * bh
(El resultado es 7.5 metros cuadrados.)
c) Diseña un programa que, a partir del valor de los dos lados de un rectángulo (4 y 6
metros, respectivamente), muestre el valor de su perímetro (en metros) y el de su área (en
metros cuadrados).
(El perímetro debe darte 20 metros y el área 24 metros cuadrados.)
4. Sentencias condicionales
Un programa de ejemplo: resolución de ecuaciones de primer grado
Diseñemos un programa para resolver cualquier ecuación de primer grado
de la forma ax + b = 0, donde x es la incógnita.
Antes de empezar hemos de responder a dos preguntas:
a) ¿Cuáles son los datos del problema? (Generalmente, los datos del problema se pedirían
al usuario con raw_input).
En nuestro problema, los coeficientes a y b son los datos del problema.
b) ¿Qué deseamos calcular? (Típicamente, lo que calculemos se mostrará al usuario el
valor de x mediante una sentencia print).
c) Ahora que conocemos los datos de entrada y el resultado que hemos de calcular, es
decir, los datos de salida, nos preguntamos: ¿cómo calculamos la salida a partir de la
entrada? En nuestro ejemplo, despejando x de la ecuación llegamos a la conclusión de que
x se obtiene calculando −b/a.
Siguiendo el esquema de los programas que sabemos hacer, procederemos así:
d) Pediremos el valor de a y el valor de b (que supondremos de tipo flotante).
e) Calcularemos el valor de x como −b/a.
f) Mostraremos por pantalla el valor de x.
a = float(raw_input(’Valor de a: ’))
b = float(raw_input(’Valor de b: ’))
x = -b / a
print ’Solución: ’, x
3
Un programador propone el siguiente programa para resolver la ecuación de primer
grado:
a = float(raw_input(’Valor de a: ’))
b = float(raw_input(’Valor de b: ’))
a*x+b=0
print ’Solución: ’, x
¿Es correcto este programa? Si no, explica qué está mal.
Otro programador propone este programa:
x = -b / a
a = float(raw_input(’Valor de a: ’))
b = float(raw_input(’Valor de b: ’))
print ’Solución: ’, x
¿Es correcto? Si no lo es, explica qué está mal
g) Programa para controlar si la variable a=0
a = float(raw_input(’Valor de a: ’))
b = float(raw_input(’Valor de b: ’))
if a != 0:
x = -b/a
print ’Solución: ’, x
if a = 0:
print ’La ecuación no tiene solución.’
Ejercicios:
a) Diseña un programa que lea un número flotante por teclado y muestre por pantalla el
mensaje El número es negativo sólo si el número es menor que cero.
b) Diseña un programa que lea un número flotante por teclado y muestre por pantalla el
mensaje El número es positivo sólo si el número es mayor o igual que cero.
c) Diseña un programa que ingrese la edad de la persona y si es mayor de 18 años se
otorga un registro de conducir.
d) Diseña un programa que, dado un número entero, muestre por pantalla el mensaje El
número es par cuando el número sea par y el mensaje el número es impar cuando sea
impar.
(Una pista: un número es par si el resto de dividirlo por 2 es 0, e impar en caso contrario.)
Ejercicios:
# Uso de números complejos
a = 1.5 + 3.0j
a.real
a.img
4
5. Resolución de ecuaciones de segundo grado
Para afianzar los conceptos presentados (y aprender alguno nuevo), vamos a presentar
otro ejemplo. En esta ocasión vamos a resolver ecuaciones de segundo grado, que son de
la forma ax2 + bx + c = 0.
¿Cuáles son los datos del problema? Los coeficientes a, b y c. ¿Qué deseamos calcular? Los
valores de x que hacen cierta la ecuación. Dichos valores son:
from math import sqrt # sqrt calcula la raíz cuadrada.
a = float(raw_input(’Valor de a: ’))
b = float(raw_input(’Valor de b: ’))
c = float(raw_input(’Valor de c: ’))
x1 = (-b + sqrt(b**2 - 4*a*c)) / (2 * a)
x2 = (-b - sqrt(b**2 - 4*a*c)) / (2 * a)
print ’Soluciones de la ecuación:’ x1 ‘y’ X2
Ejecutemos el programa:
Valor de a: 2
Valor de b: 7
Valor de c: 2
Soluciones de la ecuación: x1=-0.314 y x2=-3.186
Un problema evidente de nuestro programa es la división por cero que tiene lugar cuando
a vale 0 (pues entonces el denominador, 2a, es nulo). Tratemos de evitar el problema de la
división por cero del mismo modo que antes, pero mostrando un mensaje distinto, pues
cuando a vale 0 la ecuación no es de segundo grado, sino de primer grado.
from math import sqrt
a = float(raw_input(’Valor de a: ’))
b = float(raw_input(’Valor de b: ’))
c = float(raw_input(’Valor de c: ’))
if a != 0:
x1 = (-b + sqrt(b**2 - 4*a*c)) / (2 * a)
x2 = (-b - sqrt(b**2 - 4*a*c)) / (2 * a)
print ’Soluciones de la ecuación: x1=%4.3f y x2=%4.3f’ % (x1, x2)
if a == 0:
print ’No es una ecuación de segundo grado.’
Ejercicios:
¿Qué resultados se obtendrán al evaluar las siguientes expresiones Python?
a) int(exp(2 * log(3)))
b) round(4*sin(3 * pi / 2))
c) abs(log10(.01) * sqrt(25))
d) round(3.21123 * log10(1000), 3)
5
6. Sentencias de control
¿Cuál es la salida de los siguientes programas?
for i in range(0, 5):
for i in range(0, 5):
for j in range(0, 3):
for j in range(0, i):
print i, j
print i, j
for i in range(0, 4):
for j in range(0, 4):
for k in range(i, j):
print i, j, k
i=0
while i <= 3:
print i
i += 1
print ’Hecho’
i=0
while i < 10:
print i
i += 2
print ’Hecho’
sumatorio = 0
i=0
while i < 1000:
i += 1
sumatorio += i
print sumatorio
int(raw_input(’Valor inicial: ’))
while i < 10:
print i
i += 1
from math import sqrt
def area_triangulo(a, b, c):
s = (a + b + c) / 2.0
return sqrt(s * (s-a) * (s-b) * (s-c))
s=4
print area_triangulo(s-1, s, s+1)
print s
print a
Sucesión de Fibonacci:
La serie se construye de la siguiente manera:
La sucesión empieza con dos unos.
b) Cualquier término de la sucesión se obtiene de sumar los dos anteriores. Por ejemplo,
el noveno término de la sucesión se construye sumando el séptimo y el octavo.
c) La sucesión es infinita:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987…
# Serie de Fibonacci
a, b = 0, 1
while b < 0:
print b
a, b =b, a + b
7. Programas en Python utilizando sentencias de selección y condición:
El siguiente programa pregunta primero si desea calcular el área de un triángulo o de un
círculo. Dependiendo de la respuesta el programa debe pedir la base y la altura, o el radio,
para calcular el área. ¿Qué diferencia existe con respecto a los programas anteriores?
6
while 1:
print """
Opcion:
1 - Calcular área de un triangulo
2 - Calcular área de un círculo
3 - Salir
"""
Opc = input("Numero de la opcion > ")
if Opc == 1:
bBase = input("Base > ")
hAltura = input("Altura > ")
print "Solucion: %d" % (bBase * hAltura / 2)
elif Opc == 2:
PI = 3.14
rRadio = input("Radio > ")
print "Solucion: %d" % (PI * rRadio * rRadio)
else:
exit()
7