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]:






IWI131

Programación de Computadores

Sebastián Flores

http://progra.usm.cl/

https://www.github.com/sebastiandres/iwi131

Clase anterior

  • Funciones
  • Ruteo
  • Minitarea

Próximamente...

  • 16 Nov: Actividad 2.
  • 20 Nov: Tarea 1.
  • 23 Nov: Certamen 1.

¿Qué aprenderemos hoy?

Condicionales:

  • If
  • If-Else
  • If-Elif-Else

¿Porqué aprenderemos eso?

Condicionales:

  • If
  • If-Else
  • If-Elif-Else

Porque resulta natural en un programa ejecutar acciones que dependen de ciertas condiciones.

¿Recuerdan la actividad 1?

Revisión de la actividad 1

En la actividad 1 hay 5 bloques condicionales:

1.1 Sentencia If

Escriba un programa que pida al usuario ingresar sus tres notas, calcule el promedio (redondeado a entero) y lo felicite solamente si su promedio es mayor a 80, pero siempre le indique su promedio.

Nota 1: 45
Nota 2: 78
Nota 3: 68
Su promedio es 64

Nota 1: 79
Nota 2: 91
Nota 3: 74
Felicitaciones!
Su promedio es 81

1.1 Sentencia If

Escriba un programa que pida al usuario ingresar sus tres notas, calcule el promedio (redondeado a entero) y lo felicite solamente si su promedio es mayor a 80, pero siempre le indique su promedio.

1.1 Sentencia If

Escriba un programa que pida al usuario ingresar sus tres notas, calcule el promedio (redondeado a entero) y lo felicite solamente si su promedio es mayor a 80, pero siempre le indique su promedio.


In [19]:
def prom(n1, n2, n3):
    suma = n1 + n2 + n3
    return int(round(suma / 3.0))

n1 = int(raw_input('Nota 1: '))
n2 = int(raw_input('Nota 2: '))
n3 = int(raw_input('Nota 3: '))

promedio = prom(n1, n2, n3)

print 'Su promedio es', promedio

if promedio > 80:
    print 'Felicitaciones!'

if promedio < 20:
    print 'Nos vemos el proximo semestre'


Nota 1: 20
Nota 2: 20
Nota 3: 20
Su promedio es 20

1.2 Sentencia If-Else

Escriba un programa que pida al usuario ingresar sus tres notas, calcule el promedio (redondeado a entero) y le indique si reprobó o aprobó.

Ejemplos

Nota 1: 70
Nota 2: 25
Nota 3: 39
Usted reprobo con 45

Nota 1: 59
Nota 2: 44
Nota 3: 61
Usted aprobo con 55

1.2 Sentencia If-Else

Escriba un programa que pida al usuario ingresar sus tres notas, calcule el promedio (redondeado a entero) y le indique si reprobó o aprobó.

1.2 Sentencia If-Else

Escriba un programa que pida al usuario ingresar sus tres notas, calcule el promedio (redondeado a entero) y le indique si reprobó o aprobó, indicando la nota.


In [24]:
# Solucion 1
def prom(n1, n2, n3):
    suma = n1 + n2 + n3
    return int(round(suma / 3.))

n1 = float(raw_input('Nota 1: '))
n2 = float(raw_input('Nota 2: '))
n3 = float(raw_input('Nota 3: '))

promedio = prom(n1, n2, n3)

if promedio < 55:
    print 'Usted reprobo con', promedio
else:
    print 'Usted aprobo con', promedio


Nota 1: 10
Nota 2: 10
Nota 3: 10
30.0
Usted reprobo con 10

1.2 Sentencia If-Else

Escriba un programa que pida al usuario ingresar sus tres notas, calcule el promedio (redondeado a entero) y le indique si reprobó o aprobó, indicando la nota.


In [25]:
# Solucion 2
def prom(n1, n2, n3):
    suma = n1 + n2 + n3
    return int(round(suma / 3.0))

n1 = int(raw_input('Nota 1: '))
n2 = int(raw_input('Nota 2: '))
n3 = int(raw_input('Nota 3: '))

promedio = prom(n1, n2, n3)
if 55 <= promedio <= 100: # 50 < prom <= 30
    print 'Usted aprobo con', promedio
else:
    print 'Usted reprobo con', promedio


Nota 1: 101
Nota 2: 010
Nota 3: 250
Usted reprobo con 120

1.3 Sentencia If-Elif-Else

Escriba un programa que pida al usuario ingresar sus tres notas, e indique si su promedio (redondeado a entero) es pésimo (menor a 30), mediocre (30 a 54), aceptable (55 a 79) o excelente ( mayor o igual a 80).

Nota 1: 32
Nota 2: 89
Nota 3: 91
Su promedio 71 es aceptable

Nota 1: 77
Nota 2: 100
Nota 3: 91
Su promedio 89 es excelente!

1.3 Sentencia If-Elif-Else

Escriba un programa que pida al usuario ingresar sus tres notas, e indique si su promedio (redondeado a entero) es pésimo (menor a 30), mediocre (30 a 54), aceptable (55 a 79) o excelente ( mayor o igual a 80).

1.3 Sentencia If-Elif-Else

Escriba un programa que pida al usuario ingresar sus tres notas, e indique si su promedio (redondeado a entero) es pésimo (menor a 30), mediocre (30 a 54), aceptable (55 a 79) o excelente ( mayor o igual a 80).


In [28]:
# Solucion 1
def prom(n1, n2, n3):
    suma = n1 + n2 + n3
    return int(round(suma / 3.0))

n1 = int(raw_input('Nota 1: '))
n2 = int(raw_input('Nota 2: '))
n3 = int(raw_input('Nota 3: '))

promedio = prom(n1, n2, n3)

print 'Su promedio', promedio, 'es',

if promedio < 30:
    print 'pesimo'
elif promedio < 55:
    print 'mediocre'
elif promedio < 80:
    print 'aceptable'
else:
    print 'excelente!'


Nota 1: 80
Nota 2: 80
Nota 3: 80
Su promedio 80 es excelente!

1.3 Sentencia If-Elif-Else

Escriba un programa que pida al usuario ingresar sus tres notas, e indique si su promedio (redondeado a entero) es pésimo (menor a 30), mediocre (30 a 54), aceptable (55 a 79) o excelente ( mayor o igual a 80).


In [ ]:
# Solucion 2
def prom(n1, n2, n3):
    suma = n1 + n2 + n3
    return int(round(suma / 3.0))

n1 = int(raw_input('Nota 1: '))
n2 = int(raw_input('Nota 2: '))
n3 = int(raw_input('Nota 3: '))

promedio = prom(n1, n2, n3)

if 100>= promedio >= 80:
    print 'Su promedio', promedio, 'es', 'excelente!'
elif promedio >= 55:
    print 'Su promedio', promedio, 'es', 'aceptable'
elif promedio >= 30:
    print 'Su promedio', promedio, 'es', 'mediocre'
else:
    print 'Su promedio', promedio, 'es', 'pesimo'

2.1 Ejemplo Aerogenerador

2.1 Problema del Aerogenerador

Un generador eólico convierte la energía cinética del viento en energía eléctrica, lo cual se puede modelar en la siguiente fórmula: $$ W = k \ \rho \ r^2 \ v^3 $$ donde $W$ es la potencia (energía por unidad de tiempo), $k$ es una constante adimensional para cada generador (que tomaremos como 0.8), $\rho$ es la densidad del aire (que tomaremos como $1.2$ $kg/m^3$), $r$ es el radio de las aspas y $v$ es la velocidad del viento.

Sin embargo, el generador se pone en funcionamiento únicamente para velocidades mayores a 3 metros por segundo. Por razones de seguridad, el generador se detiene para velocidades mayores a 25 $m/s^2$.

Realice el diagrama de flujo que solicite el radio en metros y velocidad del viento en kilómetros por hora, y entregue la potencia generada en $Watts$ (esto es $kg \cdot m /s$).

2.1 Problema del Aerogenerador

2.1 Problema del Aerogenerador

Un generador eólico convierte la energía cinética del viento en energía eléctrica, lo cual se puede modelar en la siguiente fórmula: $$ W = k \ \rho \ r^2 \ v^3 $$ donde $W$ es la potencia (energía por unidad de tiempo), $k$ es una constante adimensional para cada generador (que tomaremos como 0.8), $\rho$ es la densidad del aire (que tomaremos como $1.2$ $kg/m^3$), $r$ es el radio de las aspas y $v$ es la velocidad del viento.

Sin embargo, el generador se pone en funcionamiento únicamente para velocidades mayores a 3 metros por segundo. Por razones de seguridad, el generador se detiene para velocidades mayores a 25 $m/s^2$.

Realice el diagrama de flujo que solicite el radio en metros y velocidad del viento en kilómetros por hora, y entregue la potencia generada en $Watts$ (esto es $kg \cdot m /s$).


In [34]:
# Solucion de los alumnos
def potencia_aerogenerador(r, v):
    k=0.8
    p=1.2
    if 3<v<25:
        return  k* p* r**2 * v**3
    else:
        return 0

# Leer y convertir a unidades correctas
radio = float(raw_input("Ingrese radio del aerogenerador en metros: "))
vel = float(raw_input("Ingrese velocidad del viendo en km/h: ")) * 1000 / 3600

print "%.3f" %potencia_aerogenerador(radio, vel), "Watts"


Ingrese radio del aerogenerador en metros: 10
Ingrese velocidad del viendo en km/h: 50
257201.646 Watts

2.1 Problema del Aerogenerador


In [ ]:
# Solucion 1
def potencia_aerogenerador(r, v):
    k = 0.8
    rho = 1.2
    P = k * rho * r**2 * v**3
    if 3<v<25:
        return P
    else:
        return 0

# Leer y convertir a unidades correctas
radio = float(raw_input("Ingrese radio del aerogenerador en metros: "))
vel = float(raw_input("Ingrese velocidad del viendo en km/h: ")) * 1000 / 3600

#print "Se tendría una potencia de", potencia_aerogenerador(radio, vel), "Watts"
potencia_aerogenerador(radio, vel)
print "Se tendría una potencia de", P, "Watts"

In [ ]:
# Solucion 2
def potencia_aerogenerador(r, v):
    k = 0.8
    rho = 1.2
    P = 0
    if 3<v<25:
        P = k * rho * r**2 * v**3
    return P

# Leer y convertir a unidades correctas
radio = float(raw_input("Ingrese radio del aerogenerador en metros: "))
vel = float(raw_input("Ingrese velocidad del viendo en km/h: ")) * 1000 / 3600

print "Se tendría una potencia de", potencia_aerogenerador(radio, vel), "Watts"

2.2 Problema de la Central de Bombeo

2.2 Problema de la Central Hidroelectrica de Bombeo

Una central hidroeléctica de bombeo tiene 2 modos: puede vaciar el estanque para generar electricidad, o bien, puede bombear el agua y llenar el estanque. La decisión de generar electricidad o llenar el estanque depende del precio de la electricidad y de la capacidad del estanque. Para un estanque determinado, se genera electricidad cuando el precio de electricidad es mayor a 60 USD/MWh y si el embalse se encuentra a más del 10% de su capacidad. Se consumirá electricidad y se bombeará agua al embalse cuando el precio de electricidad sea menor a 60 USD/MWh y el embalse se encuentra a menos del 90% de su capacidad.

Realice un diagrama de flujo y un programa que solicite el precio actual de la electricidad y el porcentaje de llenado del estanque, e imprima en pantalla la decisión: “GENERAR”, “BOMBEAR” o “NADA”.

2.2 Problema de la Central Hidroelectrica de Bombeo

2.2 Problema de la Central Hidroelectrica de Bombeo

Una central hidroeléctica de bombeo tiene 2 modos: puede vaciar el estanque para generar electricidad, o bien, puede bombear el agua y llenar el estanque. La decisión de generar electricidad o llenar el estanque depende del precio de la electricidad y de la capacidad del estanque. Para un estanque determinado, se genera electricidad cuando el precio de electricidad es mayor a 60 USD/MWh y si el embalse se encuentra a más del 10% de su capacidad. Se consumirá electricidad y se bombeará agua al embalse cuando el precio de electricidad sea menor a 60 USD/MWh y el embalse se encuentra a menos del 90% de su capacidad.

Realice un diagrama de flujo que solicite el precio actual de la electricidad y el porcentaje de llenado del estanque, e imprima en pantalla la decisión: “GENERAR”, “BOMBEAR” o “NADA”.


In [ ]:
# Solución de los alumnos
def accion_central(precio, capacidad):
    # FIX ME
    return

p = float(raw_input("Ingrese precio de electricidad en USD"))
estanque = float(raw_input("Ingrese porcentaje llenado del embalse [0-100]"))
accion_central(p,estanque)

2.2 Problema de la Central Hidroelectrica de Bombeo


In [ ]:
# Solución 1
def accion_central(precio, capacidad):
    if precio>60:
        if capacidad>10:
            print "Generar"
        else:
            print "Nada"
    else:
        if capacidad>90:
            print "Nada"
        else:
            print "Bombear"
    return

p = float(raw_input("Ingrese precio de electricidad en USD"))
estanque = float(raw_input("Ingrese porcentaje llenado del embalse [0-100]"))
accion_central(p,estanque)

2.3 Problema del Año Bisiesto

Un año es bisiesto si es divisible por 4, excepto si es divisible por 100 y no por 400. Escriba la función es_bisiesto(anno) que reciba el año y regrese True si el año provisto es bisiesto o False si no lo es.

es_bisiesto(1988)
True

es_bisiesto(2011)
False

es_bisiesto(1700)
False

es_bisiesto(2400)
True

2.3 Problema del Año Bisiesto

Un año es bisiesto si es divisible por 4, excepto si es divisible por 100 y no por 400.


In [ ]:
# Solucion de los alumnos
def es_bisiesto(anno):
    # FIX ME
    return False

year = int(raw_input("Ingrese un año: "))
print es_bisiesto(year)

2.3 Problema del Año Bisiesto


In [ ]:
# Solucion 1
def es_bisiesto(anno):
    if anno % 400 == 0:
        bisiesto = True
    elif anno % 100 == 0:
        bisiesto = False
    elif anno % 4 == 0:
        bisiesto = True
    else:
        bisiesto = False
    return bisiesto

year = int(raw_input("Ingrese un año: "))
print es_bisiesto(year)

In [ ]:
# Solucion 2
def es_bisiesto(anno):
    if ((anno % 4 == 0 and anno % 100 != 0) or anno % 400 == 0):
        bisiesto = True
    else:
        bisiesto = False
    return bisiesto

year = int(raw_input("Ingrese un año: "))
print es_bisiesto(year)

In [ ]:
# Solucion 3
def es_bisiesto(anno):
    return ((anno % 4 == 0 and anno % 100 != 0) or anno % 400 == 0)

year = int(raw_input("Ingrese un año: "))
print es_bisiesto(year)