Python03

Post on 12-Jun-2015

1.317 views 0 download

description

Funciones y estructura de datos tipo tupla y cadena de caracteres.

Transcript of Python03

PYTHONLección No. 3

M.Sc. Victor Pando Beltrán

victorpando@yahoo.com

http://www.civil-uancv.pe/aulavirtual

AGENDA

Funciones Funciones con retorno de dato Estructura de datos tipo tupla Estructura repetitiva for in para recorrer una

tupla Porciones de tuplas Estructura de datos tipo cadena de

caracteres (string)

RECOMENDACIONES

Poner celulares en silencio No conversar mientras el expositor está

dando la charla Si te da sueño, puedes dormir pero sin roncar

:P Si hablo muy rápido favor indicármelo para

hablar más lento

Funciones (1/4)

La estructura fundamental de programación de los lenguajes estructurados son las funciones. Una función es un conjunto de instrucciones que se la invoca mediante un nombre y que luego de ejecutado el algoritmo puede retornar un valor.

Un programa estructurado no es más que un conjunto de funciones que en conjunto resuelven un problema complejo.

Veamos la sintaxis en Python para definir y llamar a una función:

def presentacion(): print 'Primer mensaje.' print 'Segundo mensaje.'

def fin(): print 'Ultimo mensaje.'

presentacion() fin()

Funciones (2/4)

Para definir una función utilizamos la palabra clave 'def' seguida por el nombre de la función, luego si no tiene parámetros como este caso debe ir paréntesis abiertos y cerrados y dos puntos. Seguidamente las instrucciones de la función se indentan a derecha.

def presentacion(): print 'Primer mensaje.' print 'Segundo mensaje.'

Una función se ejecuta cuando se la llama por su nombre:

presentacion()

Es importante notar que primero debemos declarar la función y luego llamarla.

Funciones (3/4)

Una función puede tener parámetros de entrada, por ejemplo si queremos una función que reciba dos enteros y luego nos imprima el mayor, el algoritmo es el siguiente:

def imprimirmayor(valor1,valor2): if valor1>valor2:

print valor1 else:

print valor2 imprimirmayor(4,5) x1=20 x2=30 imprimirmayor(x1,x2)

Los parámetros de la función se indican en la cabecera de la función separados por comas.

Cuando llamamos a la función estamos obligados a enviarle datos a los dos parámetros.

Funciones (4/4)

Podemos enviarle directamente los valores:

imprimirmayor(4,5)

O podemos enviarle variables previamente inicializadas:

x1=20 x2=30 imprimirmayor(x1,x2)

Como podemos notar con este ejemplo una función puede ser llamada más de una vez (en este caso la llamamos dos veces)

Problema resuelto

Confeccionar una función que reciba un entero y luego imprima la tabla de multiplicar de dicho valor (por ejemplo si recibe un 3 luego debe mostrar del 3 hasta el 30 de 3 en 3)

def mostrartabla(num): inicio=num fin=num*10 while inicio<=fin: print inicio print '-' inicio=inicio+num mostrartabla(3)

Problema propuesto

Desarrollar una función que reciba dos enteros y nos muestre todos los valores comprendidos entre ellos (el segundo parámetro siempre debe ser mayor al primero)

def rangovalores(v1,v2): inicio=v1 while inicio<=v2:

print inicio inicio=inicio+1

rangovalores(2,20)

Funciones con retorno de dato (1/2)

Hay muchas situaciones donde queremos que la función luego de ejecutarse retorne un valor y se almacene en una variable desde donde la llamamos.

Por ejemplo si necesitamos una función que reciba tres enteros y nos retorne el mayor la sintaxis será la siguiente:

def retornarmayor(x1,x2,x3): if x1<x2 and x1<x3:

return x1 elif x2<x3:

return x2 else: return x3

may=retornarmayor(4,5,3) print may

Como podemos observar la instrucción return indica el valor devuelto por la función.

Funciones con retorno de dato (2/2)

El valor retornado se almacena en una variable:

may=retornarmayor(4,5,3)

Podemos inclusive mostrar directamente el valor retornado por la función:

print retornarmayor(40,5,3)

O utilizarlo en una condición:

if retornarmayor(40,5,3)<20: print 'El valor devuelto es mayor a 20'

Problema resuelto

Confeccionar una función que reciba tres enteros y nos retorne la suma de dichos valores.

def sumar(x1,x2,x3): su=x1+x2+x3 return su

total=sumar(10,30,42)print total

Problema PropuestoDesarrollar una función que reciba tres enteros y nos retorne la suma de los dos más grandes.

def sumarmayores(x1,x2,x3): if x1>x2 and x1>x3:

if x2>x3: return x1+x2

else: return x1+x3

elif x2>x3: if x3>x1:

return x2+x3 else:

return x2+x1 else:

if x2>x1: return x3+x2

else: return x3+x1

print sumarmayores(100,200,30)

Estructura de datos tipo tupla (1/4)

Hasta ahora hemos empleado variables que permiten almacenar un único valor.En Python existen varias estructuras de datos que permiten almacenar un conjunto de datos.

La primera que presentaremos es la tupla:Una tupla es una colección de datos no necesariamente del mismo tipo que se los accede por medio de subíndices.

Definición de una tupla:

tupla1=('juan',18,1.92) '

Hemos definido una tupla de tres elementos. El primer elemento es de tipo cadena de caracteres, el segundo un entero y finalmente un valor flotante.

Cada elemento de una tupla se los separa por una coma.

Estructura de datos tipo tupla (2/4)

Para acceder a los elementos lo hacemos por medio del nombre de la tupla y un subíndice numérico:

print tupla1[0]

Los elementos de la tupla comienzan a numerarse a partir de cero y utilizamos los corchetes para hacer referencia al subíndice.

Si queremos en algún momento saber la cantidad de elementos de una tupla debemos llamar la función len:

print len(tupla1) #imprime un 3

Estructura de datos tipo tupla (3/4)

con dicha función podemos disponer una estructura repetitiva para imprimirtodas las componentes de la tupla con el siguiente algoritmo: :

tupla1=('juan',18,1.92) indice=0 while indice<len(tupla1):

print tupla1[indice] indice=indice+1

Veremos en el próximo concepto que hay una estructura repetitiva que nos facilita recorrer los elementos de una tupla.

Una vez definida la tupla no se pueden modificar los valores almacenados.La función print puede recibir como parámetro una tupla y se encarga de mostrarla en forma completa:

print tupla1

Estructura de datos tipo tupla (4/4)

De todos modos cuando tenemos que acceder a algún elemento de la tupla debemos hacerlo mediante un subíndice entre corchetes.

La característica fundamental de una tupla es que una vez creada no podemosmodificar sus elementos, ni tampoco agregar o eliminar.

Problema resueltoDefinir dos tuplas que almacenen en una los nombres de los meses y en otra la cantidad de días que tiene cada mes del año. Luego mostrar el contenido almacenado en las mismas.

meses=('enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre')cantidaddias=(31,28,31,30,31,30,31,31,30,31,30,31)indice=0while indice<len(meses): print meses[indice] print ':' print cantidaddias[indice] print '<br>' indice=indice+1

Problema Propuesto

Definir una tupla que almacene 5 enteros. Implementar un algoritmo que imprima la suma de todos los elementos.

tupla1=(6,33,56,3,45)suma=0indice=0 while indice<len(tupla1):

suma=suma+tupla1[indice]indice=indice+1

print 'El contenido de la tupla es:‘print tupla1print 'La suma es:‘print suma

Estructura repetitiva for in para recorrer una tupla

Para recorrer una tupla es muy común utilizar la estructura repetitiva for.Veamos con un ejemplo la sintaxis de esta estructura repetitiva:

tupla1=('juan',23,1.92) for elemento in tupla1:

print elemento

Como podemos ver la instrucción for requiere una variable (en este ejemplo llamada elemento), luego la palabra clave in y por último la tupla.

El bloque del for se ejecuta tantas veces como elementos tenga la tupla, y encada vuelta del for la variable elemento almacena un valor de la tupla1.

Esta estructura repetitiva se adapta mucho mejor que el while para recorrer este tipo de estructuras de datos.

Problema resuelto

Definir una tupla con 5 valores enteros. Imprimir los valores mayores o iguales a 18.

tupla1=(45,34,2,56,1)for elemento in tupla1: if elemento>=18: print elemento

Problema Propuesto

Definir una tupla con 10 edades de personas. Imprimir la cantidad de personascon edades superiores a 20.

tupla1=(45,78,3,56,3,45,34,2,56,1) cantidad=0 for elemento in tupla1:

if elemento>20: cantidad=cantidad+1

print 'Cantidad de personas con edades superiores a 20:' print cantidad

Porciones de tuplas (1/2)El lenguaje Python nos permite rescatar una "porción" de una tupla, es decir un trozo de la misma.

Si tenemos la siguiente tupla:

tupla1=(1,7,20,40,51,3) tupla2=tupla1[0:4] print tupla2

El resultado es una tupla con cuatro valores:

(1,7,20,40)

Es decir indicamos como subíndice un rango de valores, en este caso desde la posición 0 hasta la posición 4 sin incluirla.

Porciones de tuplas (2/2)Podemos no indicar alguno de los dos rangos:

tupla1=(1,7,20,40,51,3) tupla2=tupla1[3:] print tupla2

El resultado es una tupla con tres valores, desde la posición 3 hasta el final de la tupla:

(40, 51, 3)

En caso de no indicar el primer rango:

tupla1=(1,7,20,40,51,3) tupla2=tupla1[:2]print tupla2

El resultado es una tupla con dos valores, desde el principio de la tupla hasta la posición 2 sin incluirla:

(1, 7)

Problema resuelto

Definir una tupla con los nombres de los meses. Generar dos tuplas que almacenen los primeros 6 meses la primera y los siguientes 6 meses la segunda.

meses=('enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre')tupla1=meses[:6]tupla2=meses[6:]print tupla1print tupla2

Problema Propuesto

Almacenar en una tupla 5 nombres. Luego generar un valor aleatorio entre 2 y 4.Copiar a una tupla el nombre de la posición indicada por el valor aleatorio y losnombres que se encuentran en la posición anterior y posterior.

import random nombre=('juan','ana','luis','carlos','roman') ale=random.randint(1,3)tresnombres=nombre[ale-1:ale+2] print tresnombres

Estructura de datos tipo cadena de caracteres (string) (1/5)

Una cadena de caracteres permite almacenar un conjunto de caracteres. Su funcionamiento es similar a una tupla.

Para inicializar un string utilizamos el operador de asignación.

nombre='Juan Pablo'

Podemos utilizar las comillas simples o dobles para su inicialización:

mail='jose@gmail.com'

O

mail="jose@gmail.com"

Estructura de datos tipo cadena de caracteres (string) (2/5)

Para conocer el largo de un string podemos utilizar la función len:

print len(mail)

Para acceder a un caracter particular del string lo hacemos indicando un subíndice entre corchetes:

print mail[0] #Imprimimos el primer caracter

El lenguaje Python nos permite rescatar una "porción" de un string con la misma sintaxis que trabajamos las tuplas:

nombre='Jose Maria' print nombre[1:4] #ose print nombre[:4] #Jose print nombre[5:] #Maria

Estructura de datos tipo cadena de caracteres (string) (3/5)

Los string son inmutables, es decir que no podemos modificar su contenido luego de ser inicializados:

titulo='Administracion' titulo[0]='X' # Esto produce un error

Esto no significa que no podemos utilizar la variable para que referencie a otro string:

nombre='Jose' print nombre nombre='Ana' print nombre

Para concatenar string Python permite utilizar el operador +.Si tenemos tres string y queremos almacenar sus contenidos en un cuarto string podemos codificarlo de la siguiente manera:

cadena1='uno' cadena2='dos' cadena3='tres' total=cadena1+cadena2+cadena3 print total #unodostres

Estructura de datos tipo cadena de caracteres (string) (4/5)

También Python define el operador * para los string. El resultado de multiplicarun string por un entero es otro string que repite el string original tantas veces como indica el número.

#si queremos un string con 80 caracteres de subrayado, #la forma más sencilla es utilizar la siguiente expresión: separador='_'*80 print separador

Los operadores relacionales definidos para los string son:

Mayor >= Mayor o igual < Menor <= Menor o igual == Igual != Distinto

Estructura de datos tipo cadena de caracteres (string) (5/5)

Si queremos saber si un string es mayor alfabéticamente que otro utilizamos el operador >

nombre1='CARLOS' nombre2='ANABEL' if nombre1>nombre2:

print nombre1+' es mayor alfabéticamente que '+nombre2

si queremos saber si dos variables tienes en mismo contenido:

nombre1='CARLOS' nombre2='CARLOS' if nombre1==nombre2:

print 'Las dos variables tienen el mismo contenido:'+nombre1

Problema resuelto (1/2)

Elaborar una función que reciba un string y retorne la cantidad de vocales que tiene.

def cantidadvocales(cadena): cant=0 for letra in cadena: if letra=='a': cant=cant+1 if letra=='e': cant=cant+1 if letra=='i': cant=cant+1 if letra=='o': cant=cant+1 if letra=='u': cant=cant+1 if letra=='A': cant=cant+1

Problema resuelto (2/2)

if letra=='E': cant=cant+1 if letra=='I': cant=cant+1 if letra=='O': cant=cant+1 if letra=='U': cant=cant+1 return cant

print 'Cantidad de vocales en la palabra Hola:'print cantidadvocales('Hola')print 'Cantidad de vocales en la palabra Computadora:'print cantidadvocales('Computadora')

Problema Propuesto (1/2)

Elaborar las siguientes funciones:- Una función que reciba un string y nos retorne el primer caracter.- Una función que reciba un apellido y un nombre, y nos retorne un único string con el apellido y nombre concatenados y separados por una coma.- Una función que reciba dos string y nos retorne el que tiene menos caracteres.

def primercaracter(cadena): return cadena[0]

def concatenar(apellido,nombre): return apellido+','+nombre

def menor(cadena1,cadena2): if len(cadena1)<len(cadena2):

return cadena1 else:

return cadena2

Problema Propuesto (2/2)

cad='Hola Mundo' print 'Primer caracter de '+cad+' es '+primercaracter(cad) nom='juan‘ape='rodriguez' print 'Apellido y nombre concatenados:'+concatenar(ape,nom) cad1='Hola' cad2='Fin' print 'De: '+cad1+' y '+cad2+' tiene menos caracteres '+menor(cad1,cad2)