Python03

37
PYTHON Lección No. 3 M.Sc. Victor Pando Beltrán [email protected] http://www.civil-uancv.pe/ aulavirtual

description

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

Transcript of Python03

Page 1: Python03

PYTHONLección No. 3

M.Sc. Victor Pando Beltrán

[email protected]

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

Page 2: Python03

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)

Page 3: Python03

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

Page 4: Python03

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

Page 5: Python03

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.

Page 6: Python03

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.

Page 7: Python03

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)

Page 8: Python03

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)

Page 9: Python03

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)

Page 10: Python03

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.

Page 11: Python03

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'

Page 12: Python03

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

Page 13: Python03

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)

Page 14: Python03

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.

Page 15: Python03

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

Page 16: Python03

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

Page 17: Python03

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.

Page 18: Python03

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

Page 19: Python03

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

Page 20: Python03

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.

Page 21: Python03

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

Page 22: Python03

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

Page 23: Python03

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.

Page 24: Python03

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)

Page 25: Python03

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

Page 26: Python03

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

Page 27: Python03

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='[email protected]'

O

mail="[email protected]"

Page 28: Python03

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

Page 29: Python03

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

Page 30: Python03

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

Page 31: Python03

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

Page 32: Python03

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

Page 33: Python03

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

Page 34: Python03

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

Page 35: Python03

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)

Page 37: Python03