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'


"""
Explanation: <header class="w3-container w3-teal">
<img src="images/utfsm.png" alt="" align="left"/>
<img src="images/inf.png" alt="" align="right"/>
</header>
<br/><br/><br/><br/><br/>
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:
<img src="images/actividad.png" width="800" alt="" align="middle"/>
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.
<img src="images/promedio_if.png" width="500" alt="" align="middle"/>
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.
End of explanation
"""


# 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

"""
Explanation: 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ó.
<img src="images/promedio_ifelse.png" width="500" alt="" align="middle"/>
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.
End of explanation
"""


# 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

"""
Explanation: 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.
End of explanation
"""


# 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!'

"""
Explanation: 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).
<img src="images/promedio_elif.png" width="500" alt="" align="middle"/>
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).
End of explanation
"""


# 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'

"""
Explanation: 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).
End of explanation
"""


# 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"


"""
Explanation: 2.1 Ejemplo Aerogenerador
<img src="images/generador_eolico.jpg" width="900" alt="" align="middle"/>
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
<img src="images/aerogenerador.png" width="500" alt="" align="middle"/>
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$).
End of explanation
"""


# 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"

# 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"

"""
Explanation: 2.1 Problema del Aerogenerador
End of explanation
"""


# 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)

"""
Explanation: 2.2 Problema de la Central de Bombeo
<img src="images/central-de-bombeo.jpg" width="900" alt="" align="middle"/>
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
<img src="images/centralbombeo.png" width="600" alt="" align="middle"/>
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”.
End of explanation
"""


# 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)

"""
Explanation: 2.2 Problema de la Central Hidroelectrica de Bombeo
End of explanation
"""


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

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

"""
Explanation: 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.
End of explanation
"""


# 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)

# 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)

# 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)

"""
Explanation: 2.3 Problema del Año Bisiesto
End of explanation
"""


