Está en la página 1de 18

Solución ejercicio clase 2

#kilometros: num - > float


#convierte metros en kilómetros
#ej: kilometros(100) debe ser 0.1
def kilometros(metros):
return metros/1000.0
assert kilometros(100)==0.1

#horas: num - > float


#convierte segundos en horas
#ej: horas(3600) debe ser 1.0
def horas(segundos):
return segundos/3600.0
assert horas(3600)==1.0
#velocidad: num num - > float
#calcula velocidad en km/hora
#ej: velocidad(1000,3600) debe ser 1.0
def velocidad(metros,segundos):
return kilometros(metros)/horas(segundos)
assert velocidad(1000,3600)==1.0

>>> velocidad(100,9.58)
37.57828810020877
Prob. Calcular el perímetro y el área de un círculo
dado el radio

Solución1. Con 2 funciones

#perimetroCirculo: num -> float


#perimetro de circulo de radio r
#ej: perimetroCirculo(1) debe ser
6.28
def perimetroCirculo(r):
return 2*3.14*r
assert perimetroCirculo(1)==6.28
#areaCirculo: num -> float
#area de circulo de radio r
#ej: areaCirculo(1) debe ser 3.14
def areaCirculo(r):
return 3.14*r**2
assert areaCirculo(1)==3.14

>>> radio=1
>>> perimetroCirculo(radio)
6.28
>>> areaCirculo(radio)
3.14
Solución 2. Con un módulo
#circulo: modulo grabado en circulo.py
pi=3.14

#area: num -> float


#area de circulo de radio r
#ej: area(1) debe ser 3.14
def area(r):
return pi*r**2
assert area(1)==3.14

#perimetro: num -> float


#perimetro de circulo de radio r
#ej: perimetro(1) debe ser 6.28
def perimetro(r):
return 2*pi*r
assert perimetro(1)==6.28
Uso de módulo circulo
>>> import circulo
>>> radio=1
>>> circulo.perimetro(radio)
6.28
>>> circulo.area(radio)
3.14
>>> circulo.pi
3.14
Módulo
• funciones y datos relacionados
• se graba en archivo nombre.py
• uso:
– Incluir el módulo:
import nombre
– Usar (invocar/llamar) funciones del módulo:
nombre.función(…)
– Usar variables del módulo (sin modificarlas)
nombre.variable
Programa interactivo
Ejecución (opción run):
>>>
Ingrese radio del circulo: 1
El perimetro es 6.28
El area es 3.14
Explicaciones
• input(“…”): función para leer un valor
– escribe string en la ventana de comandos
– espera que usuario (persona) ingrese un valor
– devuelve valor al lugar de invocación. Ej: r=input(…)
• print expresión1, expresión, …
– evalúa expresiones
– escribe resultados separados por espacios
en una línea de la ventana de comandos
Módulos que usan módulos
#anillo: modulo grabado en anillo.py
import circulo
#area: num num -> float
#area de anillo formado por dos circulos
#de radios rMayor y rMenor
#ej: area(2,1) debe ser 9.42
def area(rMayor,rMenor):
return circulo.area(rMayor) - circulo.area(rMenor)
assert area(2,1)==9.42

#perimetro: num num -> float


#perimetro de anillo formado por dos circulos
#de radios rMayor y rMenor
#ej: perimetro(2,1) debe ser 18.84
def perimetro(rMayor,rMenor):
return circulo.perimetro(rMayor)+circulo.perimetro(rMenor)
assert perimetro(2,1)==18.84
Programa interactivo
que usa módulo anillo
import anillo
print ‘perimetro y area de anillo'
R=input("radio de circulo grande?")
r=input("radio de circulo chico?")
print "perimetro =", anillo.perimetro(R,r)
print "area =", anillo.area(R,r)

>>>
perimetro y area de anillo
radio de circulo grande?2
radio de circulo chico?1
perimetro = 18.84
area = 9.42
>>>
Módulo predefinido math: con funciones matemáticas

función significado ejemplo resultado


sqrt(x)  x, x  0 math.sqrt(4) 2.0
pow(x,y) xy math.pow(4,0.5) 2.0
exp(x) ex math.exp(1) 2.71...
log(x) logex math.log(math.e) 1.0
sin(x) seno de angulo x math.sin(math.pi) 0.0
cos(x) coseno de x math.cos(math.pi) -1.0
tan(x) tangente de x math.tan(math.pi) 0.0
asin(x) arco-seno de x math.asin(0) 3.14…
acos(x) arco-coseno x math.acos(-1) 3.14…
atan(x) arco-tangente x math.atan(0) 3.14…
 #nombre: num -> float
 import math: incluye funciones y valores de math.pi y math.e
 help(math): muestra lista completa de funciones matemáticas
Uso de módulo math
import math
grados = input("angulo (en grados)?")
radianes = math.pi*grados/180
print "seno =", math.sin(radianes)
print "coseno =", math.cos(radianes)
>>>
angulo (en grados)?90
seno = 1.0
coseno = 6.12323399574e-17
>>>
angulo (en grados)?45
seno = 0.707106781187
coseno = 0.707106781187
Módulo random: con funciones para generar números al azar
función significado
random.random() 0≤nº<1: nº real al azar en el intervalo [0,1[
random.randint(x,y) x≤nº≤y: nº entero al azar en [x,y], con x x≤y
>>> import random
>>> random.random()
0.3504750773904878
>>> random.random()
0.013316766955305481
>>> random.randint(1,6) #lanzar un dado
6
>>> random.randint(1,6)
5
>>> random.randint(0,1) #cara o sello
1
>>> random.randint(0,1)
1
>>> random.randint(0,1)
0
Otras funciones predefinidas (no incluidas en un módulo)
función significado contrato
abs(x) |x|, es decir, x si x≥0 o –x si x<0 num -> num
max(x,y,…) mayor entre x,y,… num … -> num
min(x,y,…) menor entre x,y,… num … -> num
int(x) convertir real o string a entero float -> int
str -> int
float(x) convertir entero o string a real int -> float
str -> float
str(x) convertir número a string num -> str
Ejemplos:
>>> abs(-1) >>>abs(3.5)
1 3.5
>>> max(3,4,2) >>> min(3,4,2)
4 2
>>> max(2,3.5) >>> min(2,3.5)
3.5 2
>>> min(2,2) >>> min(2.0,2)
2 2.0
#mayor y menor de 3 enteros al azar entre 1 y 100
import random
a=random.randint(1,100)
b=random.randint(1,100)
c=random.randint(1,100)
print “mayor=”,max(a,b,c)
print “menor=”,min(a,b,c)
Propuestos. Escribir las siguientes funciones
 azar(x,y) entrega entero al azar entre x e y
 medio(x,y,z) entrega el valor del medio entre x,y,z
 mayor(x,y) entrega el mayor entre x e y (sin usar max)
Ejercicio clase 3
Problema. Calcular el perímetro y el área de un
triángulo dados sus 3 lados.
¿área? raíz cuadrada de s(s-a)(s-b)(s-c)
con s=semi perímetro (mitad del perímetro)
1.Escribir módulo triangulo
2.Escribir programa usuario interactivo que lea 3
lados y muestre perímetro y área
3.Subir 2 archivos (módulo y programa usuario) a
U-cursos antes de próxima clase

También podría gustarte