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/usantamaria/iwi131

Certamen 1

7 pm, C240.

Formato

3 preguntas:

  1. Ruteo y "adivine que hace".
  2. Diagrama de flujo.
  3. Hacer un programa en python.

Consejos previos al certamen

3 factores cruciales

  • Conocimiento: Estudien con tiempo y a conciencia.
  • Concentración: Descancen lo suficiente.
  • Energía: Coman algo ligero antes del certamen.

Consejos durante el certamen

  • No entren en pánico: respiren profundo y recuperen la concentración: si han venido a clases y estudiado, saben lo suficiente.
  • No se apuren: lean bien el enunciado, subrayen palabras claves y anoten ideas o conceptos que son importantes para resolución.
  • Pregúntense: ¿Qué se está tratando de medir en este problema? ¿Qué es lo fácil/difícil?
  • Administren bien su tiempo:
    • 15 minutos para el ruteo
    • 30 minutos para el diagrama de flujo
    • 30 minutos para programa en python
    • 5 minutos para "adivine que hace".
    • 10 minutos para revisar y corregir detalles.

Consejos después del certamen

  • Es sólo un certamen: el ramo no acaba aquí.
  • ¿Que cosas podría haber mejorarado para que me fuera mejor?
  • ¿Qué cambios voy a hacer para que me vaya mejor en el próximo certamen?

Preguntas de alumnos 1

Escriba una función ordenado(n) que verifique si los dígitos de un número entero positivo están ordenados de mayor a menor.

ordenado(567) # False
ordenado(9876) # True
ordenado(98876) #True

In [ ]:
def ordenado(n):
    str_n=str(n)
    cont = 0
    while cont<len(str_n):
        if cont == len(str_n)-1:
            return True
        if str_n[cont]<str_n[cont+1]:#como compara strings??
            return False
        else:
            cont+=1
            
print ordenado(1) # True
print ordenado(567) # False
print ordenado(9876) # True
print ordenado(98876) #True

In [ ]:
print "a" < "b"
print "a" < "z"
print "0" < "1"
print "5" < "9"
print "A" < "a"
print "Z" < "a"
print "abcdaria" < "abcedario" # Comparacion letra a letra
print "python" < "pythonistico" # Si inicios son iguales, gana la mas breve.
print "abc" < "z"  # Si inicios son distintos, no depende de numero de letras

In [ ]:
def ordenado(n):
    str_n = str(n)
    j = 0
    while j<len(str_n):
        if j == len(str_n)-1:
            return True
        if int(str_n[j]) < int(str_n[j+1]):
            return False
        j += 1
            
print ordenado(1) # True
print ordenado(567) # False
print ordenado(9876) # True
print ordenado(98876) #True

Preguntas de alumnos 1

¿Qué era importante saber en este ejemplo?

  • No existe sólo 1 forma correcta.
  • Saber convertir de string a int, y viceversa.
  • Saber recorrer un string, caracter a carácter.
  • Sintaxis de una función.
  • Regresar False si no se cumple alguna condición, y True sólo si se llega al final.

Preguntas de alumnos 2

Desarrollar la función convertir_eeuu(nota) que recibe como parámetro una nota en escala 0 -100 y retorne la nota en formato EE.UU.

  • Si nota ≥ 90, se obtiene una nota convertida A.
  • Si nota ≥ 70 y < 90, se obtiene una nota convertida B.
  • Si nota ≥ 55 y < 70, se obtiene una nota convertida C.
  • Si nota < 55, se obtiene una nota convertida F.

In [ ]:
def convertir_eeuu(nota):
    if nota>=90:
        print "A"
    elif nota>=70 and nota<90:
        print "B"
    elif nota>=55 and nota<70:
        print "C"
    elif nota<55:
        print "F"
        
print convertir_eeuu(10)
print convertir_eeuu(30)
print convertir_eeuu(40)
print convertir_eeuu(55)
print convertir_eeuu(56)
print convertir_eeuu(80)
print convertir_eeuu(90)

In [ ]:
def convertir_eeuu(nota):
    if nota>=90:
        return "A"
    elif nota>=70:
        return "B"
    elif nota>=55:
        return "C"
    else:
        return "F"
        
print convertir_eeuu(10)
print convertir_eeuu(30)
print convertir_eeuu(40)
print convertir_eeuu(55)
print convertir_eeuu(56)
print convertir_eeuu(80)
print convertir_eeuu(90)

Preguntas de alumnos 2

¿Qué era importante saber en este ejemplo?

  • Dominar if-elif-else
  • usar return, no print, cuando se necesita regresar un valor.

Preguntas de profesor : C1, 1S 2014.

El profesor de programación Rasec Wholtedo ha comenzado a producir metanfetamina, una poderosa droga alucinógena. Para dar un mejor producto a sus compradores, el profesor produce distintas variantes de la droga. Estas pueden o no producir el efecto alucinógeno deseado, por lo que se realizan pruebas y analiza la efectividad en distintos adictos. A tal fin, los adictos se encuentra divididos en 3 grupos, leves (L), medios (M) y terminales (T), en los cuales se hacen las pruebas.

Cree un programa que pida la cantidad de variantes a probar, por cada una pida los casos exitosos en un string de L, M y T, donde cada letra es un caso de éxito en el grupo que identifica. Finalmente indicar la mejor variante de metanfetamina para cada adicto, es decir, la variante que más casos de éxito producen a cada grupo.

Nota: Si dos variantes tienen la misma cantidad de éxitos indicar cualquiera de las dos.

Numero de variantes: 3
Variante 1: LLMTTLMMMM
Variante 2: MMMMTTTMMTTTTT
Variante 3: TTTTLLLTLLLLL
Mejores variantes:
Adictos leves: 3
Adictos medios: 2
Adictos terminales: 2


Numero de variantes: 4
Variante 1: LLLLLMT
Variante 2: TTMMMMMT
Variante 3: TTLLLMMLMTT
Variante 4: TTTTMMLMTTT
Mejores variantes:
Adictos leves: 1
Adictos medios: 2
Adictos terminales: 4

Preguntas de profesor : C1, 1S 2014.

¿Que necesitamos?

  • Leer el número de variantes
  • Leer cada variante
  • Actualizar los máximos para cada variante
  • Imprimir los resultados
Numero de variantes: 4
Variante 1: LLLLLMT
Variante 2: TTMMMMMT
Variante 3: TTLLLMMLMTT
Variante 4: TTTTMMLMTTT
Mejores variantes:
Adictos leves: 1
Adictos medios: 2
Adictos terminales: 4

In [ ]:
N = int(raw_input("Numero de variantes: "))
num_variante_actual = 1
max_L = 0
mejor_variante_L = 0
max_M = 0 
mejor_variante_M = 0
max_T = 0
mejor_variante_T = 0
while num_variante_actual <= N:
    variante_actual = raw_input("Variante " + str(num_variante_actual) + ":")
    # Actualizar para leve
    num_L = variante_actual.count("L")
    if num_L  > max_L:
        max_L = num_L
        mejor_variante_L = num_variante_actual
    # Actualizar para Medio
    num_M = variante_actual.count("M")
    if num_M  > max_M:
        max_M = num_M
        mejor_variante_M = num_variante_actual
    # Actualizar para Terminal
    num_T = variante_actual.count("T")
    if num_T  > max_T:
        max_T = num_T
        mejor_variante_T = num_variante_actual
    # Actualizar variante
    num_variante_actual += 1
    
# Outputs
print "Mejores variantes:"
print "Adictos leves:", mejor_variante_L
print "Adictos medios:", mejor_variante_M
print "Adictos terminales:", mejor_variante_T

¿Preguntas?

Buena suerte