You are on page 1of 13

Fundamentos de Computacin y programacin

Semestre 1/2013

UNIVERSIDAD DE SANTIAGO DE CHILE


FACULTAD DE INGENIERA Fundamentos de Computacin y Programacin (10110-1)

CLASE N11
ITERACIN Y RECURSIN RELOADED

EXPRESIONES
Hemos conocido diversas herramientas para poder resolver problemas programando:
Operaciones aritmticas
+, -, *, /, %, **

Con tres tipos de nmeros


int: 2, -230, 45, -565343, etc long: 2L, -2L, -205L, 1024L, 2147483648L float (64 bits): 2.1, -2.56, -3.234e-2
2

Fundamentos de Computacin y programacin

Semestre 1/2013

EXPRESIONES
Tambin:
Operaciones lgicas
Comparaciones: ==, >, >=, <, <=, != Operadores lgicos: not, and, or

Dos posibles valores booleanos


True, False

Expresiones booleanas permiten condicionar la ejecucin de secciones de cdigo


3

TOMANDO DECISIONES
Decisin simple
if <condicin>: <Bloque de sentencias condicionales>

Decisin alternativa
if <condicin>: <Bloque de sentencias condicionales> else: <Bloque de sentencias alternativo>

Fundamentos de Computacin y programacin

Semestre 1/2013

TOMANDO DECISIONES
Decisin mltiple:
if <cond1>: <Bloque de elif <cond2>: <Bloque de elif <cond3>: <Bloque de elif <condn>: <Bloque de [else: <Bloque de sentencias condicionadas a cond1> sentencias condicionadas a cond2> sentencias condicionadas a cond3>

sentencias condicionadas a condn> sentencias alternativo>]

opcional

MEMORIA Y FUNCIONES
Podemos recordar valores asignndolos a variables y constantes Tenemos disponibles un conjunto de funciones nativas para ser usadas Podemos extender este conjunto de funciones
Importando funciones desde mdulos
Creando nuevas funciones
6

Fundamentos de Computacin y programacin

Semestre 1/2013

FUNCIONES
Primero debemos definir la funcin
Parmetros formales Cuerpo

Nombre Encabezado

def entregaMayor(x, y):


Lneas indentadas

if x < y : return y else : return x


Sentencias de retorno Lnea en blanco sin indentar
7

FUNCIONES
Para ejecutar la funcin, debemos invocarla en una expresin
Con su nombre

Entregando un parmetro actual para cada parmetro formal


Ejemplo:
mayor = entregaMayor(5, valor)

Fundamentos de Computacin y programacin

Semestre 1/2013

BUENAS PRCTICAS
A medida que los programas se alargan, se hacen ms difciles de entender por seres humanos y debemos preocuparnos de su legibilidad
Debemos seguir buenas prcticas de programacin
Como mantener secciones de cdigo separadas
Encabezado, importacin y definicin de constantes, importacin y definicin de funciones, bloque principal del programa Usando comentarios para marcar cada seccin Usando comentarios para explicar qu hace cada funcin definida

BUENAS PRCTICAS
En el bloque principal:
Se ordena la lgica que permite resolver un problema Tambin conviene estructurarla en secciones: Entrada de datos Procesamiento, generalmente invocando funciones Salida de datos (respuestas) Tambin conviene comentar la lgica de la solucin
10

Fundamentos de Computacin y programacin

Semestre 1/2013

ESTRUCTURA DE PROGRAMAS
# ENCABEZADO # AUTOR, FECHA, OBJETIVO DEL PROGRAMA # CONSTANTES # IMPORTACIN DE CONSTANTES # DEFINICIN DE CONSTANTES # FUNCIONES # IMPORTACIN DE FUNCIONES # DEFINICIN DE FUNCIONES
11

ESTRUCTURA DE PROGRAMAS
# BLOQUE PRINCIPAL # ENTRADA DE DATOS # AQU USE variable = INPUT() # PROCESAMIENTO # AQU LLAME A LAS FUNCIONES # SALIDA # AQU PONGA SUS SENTENCIAS PRINT # FIN
12

Fundamentos de Computacin y programacin

Semestre 1/2013

BUENAS PRCTICAS
Los buenos identificadores ahorran explicaciones
Nombres de variables usan sustantivos, escritos en minsculas y capitalizando cuando el nombre es compuesto

Nombres de constantes usan sustantivos, escritos en maysculas y componiendo con guiones bajos
Nombres de funciones parten con un verbo y tambin se escriben en minsculas y capitalizando Los nombres escogidos deben ser indicativos (en el mundo real) de lo que se almacena o realiza
sueldoAyudante, TASA_DE_INTERES, calculaDescuento()
13

REPETICIONES
Podemos hacer que un conjunto de sentencias se repita Existen dos mtodos para conseguir repeticiones:
Iteracin Recursin

14

Fundamentos de Computacin y programacin

Semestre 1/2013

ITERACIN
Iteraciones de sentencias se consigue mediante el ciclo while Debemos indicar explcitamente las sentencias a repetir dentro del cuerpo del while Estas sentencias se repiten mientras la expresin booleana que condiciona el while sea verdadera Se debe tener especial cuidado de no poner condiciones siempre verdaderas (tautologas) en un ciclo while 15

ITERACIN
Sintaxis:
while <condicin>: <Bloque de sentencias a repetir>

16

Fundamentos de Computacin y programacin

Semestre 1/2013

RECURSIN
El cuerpo de una funcin se puede repetir mediante el uso de llamadas recursivas
Una llamada recursiva es cuando una funcin se llama a s misma, cambiando los parmetros actuales

La repeticin se realiza implcitamente, sin declarar exactamente qu queremos repetir Una llamada recursiva crea una nueva instancia de ejecucin de la funcin, independiente de las otras
17

RECURSIN
La repeticin se detiene cuando se alcanza un caso base, es decir, cuando se alcanza una instancia conocida del problema Es importante asegurar que la funcin alcance el caso base siempre, o se ejecutar hasta consumir toda la memoria disponible Es una solucin ms elegante que el while, pero en general consume ms recursos y es menos eficiente
18

Fundamentos de Computacin y programacin

Semestre 1/2013

RECURSIN
Para modelar una funcin recursiva es mejor pensarla en trminos de dos partes:
Regla(s) de recursin: Llamado(s) de la funcin a s misma n * factorial(n - 1) Condicin de borde: Detiene la recursin usando el caso base if n == 0: return 1
19

RECURSIN
Con esto podemos construir la funcin recursiva:
def factorial(n) if n == 0: return 1 return n * factorial(n - 1)

Veamos un detalle:
Esta funcin falla (recursin infinita) si se invoca con un parmetro formal que es negativo o un flotante
20

10

Fundamentos de Computacin y programacin

Semestre 1/2013

VALIDANDO PARMETROS
Nos podemos asegurar que un parmetro actual es vlido por medio del comando assert Sintaxis:
assert <expresin>, <mensaje al usuario>

Semntica:
Si <expresin> resulta falsa, entonces se detiene la ejecucin del programa por un error de verificacin (AssertionError) con el mensaje indicado
21

VALIDANDO PARMETROS
Ahora podemos mejorar nuestra funcin factorial() recursiva:
def factorial(n) assert n >= 0, "No definida para valores negativos" assert isinstance(n, int), "Slo definida para enteros" if n == 0: return 1 return n * factorial(n - 1)

Veamos su funcionamiento

22

11

Fundamentos de Computacin y programacin

Semestre 1/2013

VALIDANDO PARMETROS

23

VALIDANDO PARMETROS
Hacemos uso de la funcin nativa isinstance() Sintaxis:
isinstance(<expresin>, <tipo>)

Semntica:
Retorna True si la expresin resulta del tipo indicado; En caso contrario retorna False

24

12

Fundamentos de Computacin y programacin

Semestre 1/2013

CONSULTAS?

25

13

You might also like