iteración - ic-itcr.ac.crausanabria/files/2016iiscursos/intro/... · enfoque iterativo la...

28
Iteración Introducción a la programación I semestre, 2016

Upload: others

Post on 02-Aug-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Iteración

Introducción a la programación

I semestre, 2016

Page 2: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Agenda

● Introducción

● Iteración

● Estructuras de repetición While y for.

● Ejemplos (ejercicios)

● Recursividad e Iteración

● Similitudes y diferencias

Page 3: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Enfoque iterativo

Llegar a una solución programable normalmente requiere de repetir la ejecución de una serie de instrucciones (de forma secuencial)

● Durante el desarrollo del curso se ha utilizado la recursión como una solución a este problema.

Page 4: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Enfoque iterativo

La iteración ofrece una solución que viene a ser una alternativa a la recursividad.

● Según la RAE: acción efecto de iterar. Iterar: repetir.

● Es una forma natural de ejecutar acciones repetidas (si ya se tiene dominada la recursividad, aprender a iteración será sencillísimo)

A las estructuras iterativas también se les llama: ciclos, bucles o simplemente estructuras repetitivas.

Page 5: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Iteración

Lenguajes de programación proveen las estructuras de programación que permiten realizar acciones de forma repetitiva... hasta que se deje de cumplir un criterio o en otras palabras, mientras se cumple una condición.

En Python se dispone de dos estructuras para trabajar iteración:

● while

● For

Sintaxis:

while expresion:bloque-1

[else:bloque]

for iterador in iterable:bloque-1

[else:bloque]

Page 6: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Estructuras de Repetición: While

Mientras una condición se cumpla se llevará a cabo una acción.

Estas instrucciones se podrían mapear de con las expresiones cotidianas en español de la forma: “mientras”

Mamá: “mi hijito vaya a la pulpería y espere mientras llega el panadero con pan recién horneado”

¿Cuál es la repetición en este ejemplo de la vida cotidiana?

Es responsabilidad del programador asegurarse que el programa “salga” del ciclo... (¿dónde sucede eso en el ejemplo?)

import time

import random

def ir_por_pan():

print('voy a comprar pan fresco')

while not panadero():

time.sleep(1)

print('Estoy esperando...')

print('Ya voy para la casa con pan fresco' )

def panadero():

num = random.randint(1, 5)

print('\t\t numero:',num)

if num == 3: return True

else: return False

Page 7: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Estructuras de Repetición: For

Hasta que una condición se cumpla se llevará a cabo una acción.

Estas instrucciones se podrían mapear de con las expresiones cotidianas en español de la forma: “hasta”

Mamá: “mi hijito vaya a la pulpería y espere hasta 5 minutos a ver si llega el panadero con pan recién horneado, sino se viene”

¿Cuál es la repetición en este ejemplo de la vida cotidiana?

Note: tanto el while como el for (como la recursión) son equivalentes y prácticamente iguales. Los detalles que cambian son principalmente sintácticos.

import time

import random

def ir_por_pan_hasta(espera):

print('voy a comprar pan fresco')

compre_pan = False

for espera in range(0,espera):

if panadero():

compre_pan = True

print('compré pan fresco :)' )

break

else:

print('No estaba el panadero')

print('Estoy esperando...')

time.sleep(1)

if compre_pan == False:

print('No pude comprar pan :(' )

Page 8: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Iteración - ejemplos

Hacer una función para calcular el largo de una lista, utilizando la instrucción while.

def largo(lista)

Escribir una función para contar los elementos de una lista de números que sean pares, utilizando la instrucción for

def contar_pares(lista)

● Una vez que los tenga listos realice de forma manual y verifique en el depurador que la ejecución se realiza como ud. lo espera:

● largo( [1,2,3] )

● contar_pares( [1,2,3] )

Page 9: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Iteración – ejemplos (respuesta)

def largo(lista):

cont = 0

while lista != []:

cont += 1

lista = lista[1:]

return cont

def contar_pares(lista):

cont = 0

for item in lista:

if item % 2 == 0:

cont += 1

return cont

Page 10: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Diferencias While y For

● Control del ciclo (condición de terminación): en el while es “manual” y en el for “automático”

● Al momento de hacer el return, ¿que valor tienen la lista?... ¿es recorrida o destruida?

def largo_while(lista):

cont = 0

   while lista != []:

cont += 1

lista = lista[1:]

return cont

def largo_for(lista):

cont = 0

for item in lista:

cont += 1

return cont

Page 11: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Recursividad vs Iteración

Page 12: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Ejercicios de iteración con números

● Determinar si un número tiene algún dígito par.

def tiene_par(numero)

● Calculo de factorial:

0! = 1

1! = 1 * 0! = 1 * 1 = 1

2! = 2 * 1! = 2 * 1 * 0! = 2 * 1 * 1 = 2

n! = n * (n-1)!

def factorial(numero)

● Sumatoria de i en un intervalo A – B (incluyéndolos)

def suma_intervalo(A,B)

Page 13: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Referencias y Lecturas Complementarias

● Material suministrado por el profesor Aurelio Sanabria, Instituto Tecnológico de Costa Rica. I semestre 2011.

● Material suministrado por el profesor Jeff Schmidt, Instituto Tecnológico de Costa Rica. I semestre 2011.

● En general: http://docs.python.org/3/

Page 14: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

14

Las presentaciones para el curso IC-1800: "Introducción a la Programación" por Ing. En Computación Alajuela se distribuyen bajo una

Licencia Creative Commons Atribución-Compartir Igual 3.0 Costa Rica.

http://creativecommons.org/licenses/by-sa/3.0/cr/http://creativecommons.org/licenses/by-sa/3.0/cr/ *La licencia de la presentación no cubre las imágenes utilizadas*

Page 15: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Iteración

Introducción a la programación

I semestre, 2016

Page 16: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Agenda

● Introducción

● Iteración

● Estructuras de repetición While y for.

● Ejemplos (ejercicios)

● Recursividad e Iteración

● Similitudes y diferencias

http://anaisabeltrigo.blogspot.com/2014/06/diario-estival.html

La imagen no se de dónde es, pero también están usando eso en Murcia: http://autoescuelacarland.com/blog/la-senal-que-alerta-a-los-peatones-tecnologicos-enganchados-al-movil/

Page 17: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Enfoque iterativo

Llegar a una solución programable normalmente requiere de repetir la ejecución de una serie de instrucciones (de forma secuencial)

● Durante el desarrollo del curso se ha utilizado la recursión como una solución a este problema.

Page 18: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Enfoque iterativo

La iteración ofrece una solución que viene a ser una alternativa a la recursividad.

● Según la RAE: acción efecto de iterar. Iterar: repetir.

● Es una forma natural de ejecutar acciones repetidas (si ya se tiene dominada la recursividad, aprender a iteración será sencillísimo)

A las estructuras iterativas también se les llama: ciclos, bucles o simplemente estructuras repetitivas.

Page 19: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Iteración

Lenguajes de programación proveen las estructuras de programación que permiten realizar acciones de forma repetitiva... hasta que se deje de cumplir un criterio o en otras palabras, mientras se cumple una condición.

En Python se dispone de dos estructuras para trabajar iteración:

● while

● For

Sintaxis:

while expresion:bloque-1

[else:bloque]

for iterador in iterable:bloque-1

[else:bloque]

el bloque else se ejecuta cuando la expresión se convierte en falsa. → no es común en la mayoría de lenguajes

●Sobre el while: - En caso de que la expresión sea verdadera se ejecuta el while. - La identación define el alcance del while ●Se ejecuta el ciclo siempre que la expresión condicional sea verdadera●Es responsabilidad del programador que el while termine

ForUn iterable es un objeto que puede retornar sus elementos uno a la vez. Las secuencias como los strings, listas, tuplas son iterables

Page 20: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Estructuras de Repetición: While

Mientras una condición se cumpla se llevará a cabo una acción.

Estas instrucciones se podrían mapear de con las expresiones cotidianas en español de la forma: “mientras”

Mamá: “mi hijito vaya a la pulpería y espere mientras llega el panadero con pan recién horneado”

¿Cuál es la repetición en este ejemplo de la vida cotidiana?

Es responsabilidad del programador asegurarse que el programa “salga” del ciclo... (¿dónde sucede eso en el ejemplo?)

import time

import random

def ir_por_pan():

print('voy a comprar pan fresco')

while not panadero():

time.sleep(1)

print('Estoy esperando...')

print('Ya voy para la casa con pan fresco' )

def panadero():

num = random.randint(1, 5)

print('\t\t numero:',num)

if num == 3: return True

else: return False

Page 21: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Estructuras de Repetición: For

Hasta que una condición se cumpla se llevará a cabo una acción.

Estas instrucciones se podrían mapear de con las expresiones cotidianas en español de la forma: “hasta”

Mamá: “mi hijito vaya a la pulpería y espere hasta 5 minutos a ver si llega el panadero con pan recién horneado, sino se viene”

¿Cuál es la repetición en este ejemplo de la vida cotidiana?

Note: tanto el while como el for (como la recursión) son equivalentes y prácticamente iguales. Los detalles que cambian son principalmente sintácticos.

import time

import random

def ir_por_pan_hasta(espera):

print('voy a comprar pan fresco')

compre_pan = False

for espera in range(0,espera):

if panadero():

compre_pan = True

print('compré pan fresco :)' )

break

else:

print('No estaba el panadero')

print('Estoy esperando...')

time.sleep(1)

if compre_pan == False:

print('No pude comprar pan :(' )

Page 22: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Iteración - ejemplos

Hacer una función para calcular el largo de una lista, utilizando la instrucción while.

def largo(lista)

Escribir una función para contar los elementos de una lista de números que sean pares, utilizando la instrucción for

def contar_pares(lista)

● Una vez que los tenga listos realice de forma manual y verifique en el depurador que la ejecución se realiza como ud. lo espera:

● largo( [1,2,3] )

● contar_pares( [1,2,3] )

Se debe inicializar una variable contador, entrar en el ciclo y contar hasta que se acabe la lista.

def largo(lista):Cont = 0 # contador del largo de la

listawhile lista != []:

Cont += 1 # actualización del contador

lista = lista[1:]return cont

def contar_pares(lista): cont = 0 # contador de pares for item in lista: if item % 2 == 0: cont += 1 # actualización del contador lista = lista[1:] return cont

Page 23: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Iteración – ejemplos (respuesta)

def largo(lista):

cont = 0

while lista != []:

cont += 1

lista = lista[1:]

return cont

def contar_pares(lista):

cont = 0

for item in lista:

if item % 2 == 0:

cont += 1

return cont

Page 24: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Diferencias While y For

● Control del ciclo (condición de terminación): en el while es “manual” y en el for “automático”

● Al momento de hacer el return, ¿que valor tienen la lista?... ¿es recorrida o destruida?

def largo_while(lista):

cont = 0

   while lista != []:

cont += 1

lista = lista[1:]

return cont

def largo_for(lista):

cont = 0

for item in lista:

cont += 1

return cont

Control de cilco: lista no sea nula, llegar al caso base, y terminar la función.En la versión de while la lista de destruye, en el for no.

Page 25: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Recursividad vs Iteración

1.num = valor absoluto de num, para evitar recursividad infinita o ejecución infinita en iteración.2. dig = cero, sirve para guardar el número de digitos.3. La cond. de terminación usada en la func. Recursiva, se niega en la iteración para indicar la condición que va a mantener el ciclo while.4. Recursiva: num se pasa como parametro con el valor de dig entre 10. Iterativa, la variable num se asigna con la división en forma entera entre 10.5. Recursiva, dig se pasa como parametro aumentado en 1. Iterativa, se asigna dig al incremento dedig en cada ciclo.

Además hay muchas cuestiones técnicas involucradas en la comparación: uso de la pila de llamados.

Page 26: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Ejercicios de iteración con números

● Determinar si un número tiene algún dígito par.

def tiene_par(numero)

● Calculo de factorial:

0! = 1

1! = 1 * 0! = 1 * 1 = 1

2! = 2 * 1! = 2 * 1 * 0! = 2 * 1 * 1 = 2

n! = n * (n-1)!

def factorial(numero)

● Sumatoria de i en un intervalo A – B (incluyéndolos)

def suma_intervalo(A,B)

def tiene_par(num):if not isinstance(num,int):

return "Error: número debe ser entero"

if num == 0:return True

num = abs(num)while num != 0:

If num % 2 == 0:return True

num //= 10return False

Page 27: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

Referencias y Lecturas Complementarias

● Material suministrado por el profesor Aurelio Sanabria, Instituto Tecnológico de Costa Rica. I semestre 2011.

● Material suministrado por el profesor Jeff Schmidt, Instituto Tecnológico de Costa Rica. I semestre 2011.

● En general: http://docs.python.org/3/

Page 28: Iteración - ic-itcr.ac.crausanabria/files/2016IIScursos/intro/... · Enfoque iterativo La iteración ofrece una solución que viene a ser una alternativa a la recursividad. Según

14

Las presentaciones para el curso IC-1800: "Introducción a la Programación" por Ing. En Computación Alajuela se distribuyen bajo una

Licencia Creative Commons Atribución-Compartir Igual 3.0 Costa Rica.

http://creativecommons.org/licenses/by-sa/3.0/cr/http://creativecommons.org/licenses/by-sa/3.0/cr/ *La licencia de la presentación no cubre las imágenes utilizadas*