In [1]:
"""
IPython Notebook v4.0 para python 2.7
Librerías adicionales: Ninguna.
Contenido bajo licencia CC-BY 4.0. Código bajo licencia MIT. (c) Sebastian Flores.
"""
# Configuracion para recargar módulos y librerías
%reload_ext autoreload
%autoreload 2
from IPython.core.display import HTML
HTML(open("style/iwi131.css", "r").read())
Out[1]:
In [2]:
j = 0
while j<10:
print j,
j += 1
In [3]:
# Toda la información de los valores utilizados está en range(10)
for j in range(10):
print j,
In [7]:
print range(30)
for i in range(30):
print i**2,
In [8]:
for i in range(30, 60):
print i,
In [10]:
for i in tuple(range(30,60,4)):
print i,
In [11]:
j = 1
while j<80:
if j%3==0:
print j,
j += 1
In [12]:
for j in range(3,80,3):
print j,
In [24]:
mi_lista = ["sebastian", "carlos", "jose"]
# Iterando con indices
for i in range(len(mi_lista)):
print i, mi_lista[i]
mi_lista[i] = str(i) + "holamundo"+mi_lista[i] * 2
print mi_lista
In [25]:
mi_lista = ["sebastian", "carlos", "jose"]
# Iterando con indices
for nombre in mi_lista:
for letra in nombre:
print letra,
print ""
#print nombre
#nombre = nombre * 2
print mi_lista
In [31]:
mi_tupla = ("sebastian", "carlos", "jose")
# Iterando con indices
for i in range(len(mi_tupla)):
print i, mi_tupla[i]
#mi_tupla[i] = str(i) + "holamundo"+mi_tupla[i] * 2
print mi_tupla
In [32]:
mi_tupla = ("sebastian", "carlos", "jose")
# Iterando con indices
for nombre in mi_tupla:
print nombre
nombre = nombre*2
print mi_tupla
In [41]:
ramos = ['Progra', 'Mate', 'Fisica']
horas = ['8:00', '10:00', '12:00',"21:00"]
for i in range(len(ramos)):
#if ramos[i]=="Progra":
# horas[i] = "todo el dia"
print ramos[i] + " a las " + horas[i]
print "\nProducto cartesiano:"
for ramo in ramos:
for hora in horas:
print ramo + " a las " + hora
Calcule el promedio y la desviación estándar de $N$ datos, $x_1$, ..., $x_n$, ingresados por el usuario:
$$ \begin{align} mean &= \frac{1}{n} \sum_{i=1} x_i \\ (std)^2 &= \frac{1}{n} \sum_{i=1} (x_i- mean)^2 \end{align} $$Transformando desde ciclo while a ciclo for
In [42]:
def leer_datos(cantidad):
datos = []
for i in range(cantidad):
datos.append( float(raw_input('Dato ' + str(i+1) + ': ')) )
print "datos", datos
return datos
def promedio(valores):
return sum(valores) / float(len(valores))
def desviacion(valores):
p = promedio(valores)
suma = 0.0
for numero in valores:
suma += (numero - p) ** 2
return ( suma / len(valores) ) ** 0.5
n = int(raw_input('Cuantos datos? '))
datos = leer_datos(n)
print 'El promedio es ', promedio(datos)
print 'La desviacion estandar es', desviacion(datos)
In [ ]:
# Definicion de funcion(es)
# Uso de funciones
p = [(4, 1), (7, 2), (7, 4), (5, 9)]
print perimetro(p) # 18.609700215601432
In [43]:
# Definicion de funcion(es)
def distancia(p1, p2):
x1, y1 = p1
x2, y2 = p2
return 0. + ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** .5
def perimetro(vertices):
n = len(vertices)
suma = 0.0
for i in range(n):
a = vertices[i]
b = vertices[(i + 1) % n]
suma += distancia(a, b)
return suma
# Uso de funciones
p = [(4, 1), (7, 2), (7, 4), (5, 9)]
print perimetro(p) # 18.609700215601432
Una nueva cadena de cines creada por emprendedores de la USM, está ingresando al mercado cinematográfico. Por eso necesita de su ayuda para implementar ciertas funciones de la cartelera en python y con ellas manejar la cartelera.
Para ello se cuenta con la información de cine en una lista de tuplas como cartelera. A modo de ejemplo, en cartelera la película ’Gloria’ (Chilena), creada en 2013, se exhibirá el mes de ’enero’ en las ’sala1’ y ’sala2’.
Cada elemento de la lista tiene la siguiente estructura:
(mes,
pais,
nombre_pelicula,
año_filmacion,
[sala1, sala2, ...])
In [45]:
cartelera = [
('febrero', 'FRANCIA', 'El muelle', 1962, ['sala1', 'sala3']),
('febrero', 'FRANCIA', 'La dama de honor', 2004, ['sala1', 'sala4']),
('abril', 'RUSIA', 'Padre del soldado', 1964, ['sala3', 'sala2', 'sala4']),
('enero', 'CHILE', 'Gloria', 2013, ['sala1', 'sala2']),
('mayo', 'MEXICO', 'Cumbres', 2013, ['sala3', 'sala2']),
('julio', 'FRANCIA', 'Melo', 1986, ['sala3', 'sala1']),
('junio', 'BELGICA', 'Rondo', 2012, ['sala4', 'sala2']),
('marzo', 'ALEMANIA', 'Tiempo de Canibales', 2014, ['sala1', 'sala2']),
('marzo', 'ALEMANIA', 'Soul Kitchen', 2009, ['sala3', 'sala4']),
]
Desarrolle la función pelicula_por_pais(cartelera, pais) que recibe la lista de la cartelera y el nombre de un país, y que retorne la lista con las películas realizadas en dicho país. Cada elemento de esta lista resultante es una tupla con el nombre de la película y el año de filmación.
>>> pelicula_por_pais(cartelera, 'FRANCIA')
[('El muelle', 1962), ('La dama de honor', 2004), ('Melo', 1986)]
In [ ]:
# Solucion estudiantes
Desarrolle la función pelicula_por_pais(cartelera, pais) que recibe la lista de la cartelera y el nombre de un país, y que retorne la lista con las películas realizadas en dicho país. Cada elemento de esta lista resultante es una tupla con el nombre de la película y el año de filmación.
>>> pelicula_por_pais(cartelera, 'FRANCIA')
[('El muelle', 1962), ('La dama de honor', 2004), ('Melo', 1986)]
In [ ]:
# Solucion con while
def pelicula_por_pais(cartelera, pais):
n = len(cartelera)
j = 0
peliculas_pais = []
while j<n:
mes_j, pais_j, nombre_pelicula_j, anno_j, salas_j = cartelera[j]
if pais_j==pais:
peliculas_pais.append( (nombre_pelicula_j, anno_j) )
j += 1
return peliculas_pais
print pelicula_por_pais(cartelera, 'FRANCIA')
In [46]:
# Solucion con ciclo for
def pelicula_por_pais(cartelera, pais):
peliculas_pais = []
for datos in cartelera:
mes_j, pais_j, nombre_pelicula_j, anno_j, salas_j = datos
if pais_j==pais:
peliculas_pais.append( (nombre_pelicula_j, anno_j) )
return peliculas_pais
print pelicula_por_pais(cartelera, 'FRANCIA')
Desarrolle la función peliculas_por_sala(cartelera, sala) que reciba la lista de la cartelera y la sala donde se exhibirán las distintas películas. Esta función debe retornar una lista donde el elemento i sea una lista con el nombre de las películas que se exhibirán en dicha sala en el mes (i+1)-ésimo.
pelicula_por_sala(cartelera, 'sala1')
[['Gloria'], # Enero
['El muelle', 'La dama de honor'], # Febrero
['Tiempo de Canibales'] # Marzo
...
]
In [ ]:
# Estudiantes
Desarrolle la función peliculas_por_sala(cartelera, sala) que reciba la lista de la cartelera y la sala donde se exhibirán las distintas películas. Esta función debe retornar una lista donde el elemento i sea una lista con el nombre de las películas que se exhibirán en dicha sala en el mes i+1.
pelicula_por_sala(cartelera, 'sala1')
[['Gloria'], # Enero
['El muelle', 'La dama de honor'], # Febrero
['Tiempo de Canibales'] # Marzo
...
]
In [52]:
# Solucion con ciclo for
def pelicula_por_sala(cartelera, sala):
# Crear lista donde guardar las peliculas
peliculas = []
for i in range(12):
peliculas.append([])
# Recorrer las peliculas y guardar los datos
for dato in cartelera:
mes, pais, nombre_pelicula, anno, salas = dato
if sala in salas:
if mes=="enero":
peliculas[0].append(nombre_pelicula)
elif mes=="febrero":
peliculas[1].append(nombre_pelicula)
elif mes=="marzo":
peliculas[2].append(nombre_pelicula)
elif mes=="abril":
peliculas[3].append(nombre_pelicula)
elif mes=="mayo":
peliculas[4].append(nombre_pelicula)
elif mes=="junio":
peliculas[5].append(nombre_pelicula)
elif mes=="julio":
peliculas[6].append(nombre_pelicula)
elif mes=="agosto":
peliculas[7].append(nombre_pelicula)
elif mes=="septiembre":
peliculas[8].append(nombre_pelicula)
elif mes=="octubre":
peliculas[9].append(nombre_pelicula)
elif mes=="noviembre":
peliculas[10].append(nombre_pelicula)
elif mes=="diciembre":
peliculas[11].append(nombre_pelicula)
else:
print "Hmmm, no conozco ese mes"
# Regresar la lista
return peliculas
pelicula_por_sala(cartelera, 'sala1')
Out[52]:
Desarrolle la función peliculas_por_sala(cartelera, sala) que reciba la lista de la cartelera y la sala donde se exhibirán las distintas películas. Esta función debe retornar una lista donde el elemento i sea una lista con el nombre de las películas que se exhibirán en dicha sala en el mes i+1.
pelicula_por_sala(cartelera, 'sala1')
[['Gloria'], # Enero
['El muelle', 'La dama de honor'], # Febrero
['Tiempo de Canibales'] # Marzo
...
]
In [ ]:
# Solucion con ciclo while
def pelicula_por_sala(cartelera, sala):
# Crear lista donde guardar las peliculas
peliculas = []
for i in range(12):
peliculas.append([])
# Recorrer las peliculas y guardar los datos
j = 0
for j in range(len(cartelera)):
dato = cartelera[j]
mes, pais, nombre_pelicula, anno, salas = dato
if sala in salas:
if mes=="enero":
peliculas[0].append(nombre_pelicula)
elif mes=="febrero":
peliculas[1].append(nombre_pelicula)
elif mes=="marzo":
peliculas[2].append(nombre_pelicula)
elif mes=="abril":
peliculas[3].append(nombre_pelicula)
elif mes=="mayo":
peliculas[4].append(nombre_pelicula)
elif mes=="junio":
peliculas[5].append(nombre_pelicula)
elif mes=="julio":
peliculas[6].append(nombre_pelicula)
elif mes=="agosto":
peliculas[7].append(nombre_pelicula)
elif mes=="septiembre":
peliculas[8].append(nombre_pelicula)
elif mes=="octubre":
peliculas[9].append(nombre_pelicula)
elif mes=="noviembre":
peliculas[10].append(nombre_pelicula)
elif mes=="diciembre":
peliculas[11].append(nombre_pelicula)
else:
print "Hmmm, no conozco ese mes"
j += 1 # No olvidemos aumentar el contador
# Regresar la lista
return peliculas
pelicula_por_sala(cartelera, 'sala2')
In [ ]:
# Solución estudiantes
In [53]:
# Solucion ciclo for
def mas_antigua(cartelera):
# Inicializar contadores
anno_mas_antigua = float("inf")
tupla_mas_antigua = ("","")
# Recorrer las peliculas y guardar los datos
for dato in cartelera:
mes, pais, nombre_pelicula, anno, salas = dato
if anno < anno_mas_antigua:
anno_mas_antigua = anno
tupla_mas_antigua = (nombre_pelicula, pais)
# Terminamos, regresar valor
return tupla_mas_antigua
print mas_antigua(cartelera)
In [ ]:
# Solucion ciclo while
def mas_antigua(cartelera):
# Inicializar contadores
anno_mas_antigua = float("inf")
tupla_mas_antigua = ("","")
# Recorrer las peliculas y guardar los datos
j = 0
for j in range(len(cartelera)):
dato = cartelera[j]
mes, pais, nombre_pelicula, anno, salas = dato
if anno < anno_mas_antigua:
anno_mas_antigua = anno
tupla_mas_antigua = (nombre_pelicula, pais)
j += 1
# Terminamos, regresar valor
return tupla_mas_antigua
print mas_antigua(cartelera)
Desarrolle una función que cumpla los siguientes tests. Enviar por correo.
Caso 1:
Caso 2:
Caso 3:
Caso 4:
OBS: No debería tomar más de 10-15 líneas.
Escriba la función todos_iguales(lista) que indique si todos los elementos de una lista son iguales:
print todos_iguales([6, 6, 6])
True
print todos_iguales([6, 6, 1])
False
print todos_iguales([0, 90, 1])
False
print todos_iguales([7, 7, 7, 7, 7, 7, 7, 7, 7])
True
print todos_iguales([12])
True
In [ ]:
print todos_iguales([6, 6, 6])
print todos_iguales([6, 6, 1])
print todos_iguales([0, 90, 1])
print todos_iguales([7, 7, 7, 7, 7, 7, 7, 7, 7])
print todos_iguales([12])
In [ ]:
def todos_iguales(lista):
if len(lista)==0:
return True
patron = lista[0]
for elemento in lista:
if elemento!=patron:
return False
return True
print todos_iguales([6, 6, 6])
print todos_iguales([6, 6, 1])
print todos_iguales([0, 90, 1])
print todos_iguales([7, 7, 7, 7, 7, 7, 7, 7, 7])
print todos_iguales([12])
Escriba una función todos_distintos(lista) que indique si todos los elementos de una lista son distintos:
print todos_distintos([6, 6, 6])
False
print todos_distintos([6, 6, 1])
False
print todos_distintos([0, 90, 1])
True
print todos_distintos(list(range(1000)))
True
print todos_distintos(list('hiperblanduzcos'))
True
Pista: lista[:i] y lista[i:]
In [ ]:
# Solucion Estudiantes
print todos_distintos([6, 6, 6])
print todos_distintos([6, 6, 1])
print todos_distintos([0, 90, 1])
print todos_distintos(list(range(1000)))
print todos_distintos(list('hiperblanduzcos'))
In [ ]:
def todos_distintos(lista):
if len(lista)==0:
return True
for i in range(len(lista)):
elemento = lista[i]
if elemento in lista[:i]:
return False
if elemento in lista[(i+1):]:
return False
return True
print todos_distintos([6, 6, 6])
print todos_distintos([6, 6, 1])
print todos_distintos([0, 90, 1])
print todos_distintos(list(range(1000)))
print todos_distintos(list('hiperblanduzcos'))