5.3.1 Funciones – Ejercicios resueltos en Python

Ejercicios resueltos sobre Funciones() definidas por el usuario. Los ejemplos presentados, requieren que el usuario desarrolle el algoritmo como una función acorde a las estructuras de programación.

3Eva_IT2000_T1 Validar caracteres tipo numérico

Solución Propuesta: s3Eva_IT2000_T1 Validar caracteres tipo numérico

3Eva_IIIT2003_T1 Funciones lógicas pyq y poq

Solución Propuesta: s3Eva_IIIT2003_T1 Funciones lógicas pyq y poq

2Eva_IIT2002_T1 Número perfecto

Solución Propuesta: s2Eva_IIT2002_T1 Número perfecto

2Eva_IIT2002_T3 Encriptar PIN(4 dígitos)

Solución propuesta: s2Eva_IIT2002_T3 Encriptar PIN(4 dígitos)

2Eva_IT2008_T2 Validar cédula ecuatoriana

Solución propuesta: s2Eva_IT2008_T2 Validar cédula ecuatoriana

5.3 Funciones – Ordenar una lista numérica con el Método de la burbuja (bubble sort)

Referencia: Rodríguez 7.2.1 p224, ordenamiento de burbuja wikipedia

Se dispone de una lista de la estatura de los estudiantes de una escuela, que para formar fila se requiere ordenar en forma ascendente.

X = [85,75,65,80]

La primera acción a realizar es ubicar al estudiante de menor estatura en la primera posición en la fila.

Se puede realizar comparando la estatura X[i], i=0, con las estaturas X[j], j=1, de cada estudiante que se encuentra detrás de él.

X = [85,75,65,80]
      i  j

Si el estudiante estudiante j es de menor estatura, deberá ocupar la posición primera i, asegurando que al menos hasta donde se ha revisado.

X = [75,85,65,80]  # se intercambia
      i  j

Se debe intercambiar los valores entre las posiciones i vs j. El intercambio de posiciones lleva tres pasos:

  • primero, se aparta al estudiante de la posición i
  • segundo, se mueve al estudiante de la posición j para ocupar la posición i
  • tercero, es estudiante que se apartó, se le pide que ocupe la posición del estudiante j.

Quedando la lista como la mostrada en el ejemplo anterior. Este paso es semejante a una burbuja que «asciende».

if X[j]<X[i]: #intercambia i con j
    aparta = X[i]
    X[i] = X[j]
    X[j] = aparta

Se repite el proceso entre las posiciones i vs j+1, hasta llegar al último estudiante, asegurando que al menos en la posición i, se encuentre el estudiante de menor estatura.

X = [75,85,65,80]
      i     j
X = [65,85,75,80] # se intercambia
      i     j
X = [65,85,75,80] # no es necesario el intercambio
      i        j

Se procede a realizar el análisis con el estudiante i+1, para todos los que se encuentren detrás de él, pues todos los anteriores tienen menor estatura.

X = [65,85,75,80] # no es necesario el intercambio
         i  j -->

Algoritmo en Python

# Ordena ascendente, 
# método de la burbuja, Bubble sort
# INGRESO
X = [75,85,65,80]

# PROCEDIMIENTO
n = len(X)
i = 0          # primero de la lista
while i<(n-1): # hasta penúltimo
    j = i+1    # siguiente de i
    while j<n: # hasta el último
        if X[j]<X[i]: #intercambia i con j
            aparta = X[i]
            X[i] = X[j]
            X[j] = aparta
        j = j + 1
    i = i + 1

# SALIDA
print(X)

Tarea:
Escribir el algoritmo como una función estructurada.
Realizar el algoritmo para ordenar en forma descendente.

Referencias: Obama recuerda aún el algoritmo de Bubble Sort. Dan Siroker (2013)

5.2 Funciones – Algoritmo del mayor, menor, ¿dónde?, ¿cuánto?

[ algoritmo ] [ función ]

De compras en el mercado de víveres, se puede consultar en precio en varios puestos y decidir dónde comprar al final de un recorrido. Si el único factor a considerar es el precio, desde luego que compraremos en el local mas barato.

mercado viveres 01Se obtiene la lista de precios por vendedor de 1 Kg de manzanas y se requiere determinar el local con el precio más barato y en qué posición se encuentra. Considere usar el índice local empezando en cero

local 0 1 2 3
precio 2.25 3.00 2.10 2.50
precio = [2.25,3,2.10,2.50]

Al inicio y sin mas datos, se supone que el mejor precio lo ofrece el primer vendedor.  Siendo el tamaño del vector n=4

n = len(precio)
donde = 0

Sin embargo la decisión se debe tomar considerando los demás locales, por lo que se compara su precio con los demás. La comparación empieza con el siguiente en la lista.

local = donde + 1 
while local<n:
    if (precio[local]<precio[donde]):
        donde = local
    local = local + 1

¿Cuánto? es el precio menor, se obtiene al revisar el valor del vector en la posición de ¿donde?

cuanto = precio[donde]

Tarea: Algoritmo del mayor. ¿Qué pasaría si alguien nos pregunta dónde lo venden más caro? Analice los cambios en el algoritmo.

[ algoritmo ] [ función ]
..


Algoritmo en Python

# algoritmo del menor

# INGRESO:
precio = [2.25,3,2.10,2.50]

# PROCEDIMIENTO
n = len(precio)
donde = 0
local = donde + 1 
while local<n:
    if (precio[local]<precio[donde]):
        donde = local
    local = local + 1

cuanto = precio[donde]

# SALIDA
print('El menor precio:')
print('donde:',donde)
print('cuanto:',cuanto)

[ algoritmo ] [ función ]
..


Función en Python

El bloque de procedimiento  se convierte a una función denominada menor, con variable de entrada vector y variable de salida donde.

# algoritmo del menor
def menor_donde(vector):
    n = len(vector)
    donde = 0
    i = donde + 1 
    while i<n:
        if (vector[i]<vector[donde]):
            donde = i
        i = i + 1
    return(donde)

# INGRESO:
precio = [2.25,3,2.10,2.50]

# PROCEDIMIENTO
donde = menor_donde(precio)
cuanto = precio[donde]

# SALIDA
print('El menor precio:')
print('donde:',donde)
print('cuanto:',cuanto)

[ algoritmo ] [ función ]


Ejercicios de mayor y menor

1Eva_IT2003_T4 Lado mayor de un polígono

1Eva_IIT2008_T3 Tiempos de recorrido en metrovia

1Eva_IT2007_T3 Elección de diputados provinciales

2Eva_IT2003_T1 Funciones promedio, mayor y menor

3Eva_IIT2008_T3 Funciones más caro y más barato

5.1 Funciones en programación – Reusar algoritmos

Cuando un algoritmo se usa de forma frecuente, en lugar de repetir las instrucciones cada vez que se necesitan, se pueden resumir y extraer en un bloque o sección dedicada independiente del resto denominada función. funciones en programacion y diagramas de flujo

Si cada algoritmo sigue la «estructura básica», la función es un bloque de procedimiento que se podrá reutilizar en cualquier otro problema y trabaja de forma «modular».

El bloque o función() se identifica con un nombre, que será el nombre de la función
y usa las variables de entrada (a) y variable de salida (z).

En programación estructurada, al cambiarse los bloques de entrada (input) y los bloques de salida (print), las instrucciones de entrada y salida se las mantiene dentro del programa principal que hace la llamada a las funciones.

La definición de una función en Python se escribe como:

def funcion(entrada):
    # intrucciones
    # detalladas de la funcion
    return(respuesta)

Definida la función se puede usar una o varias veces en un programa principal usando el nombre de la función junto a la variable de entrada.

funciones en programación y diagramas de flujo

El resultado de la función se asigna a una variable que es usada dentro del programa principal.

resultado = funcion(entrada)

Se pueden hacer tantas llamadas a la función como sean necesarias.

Las funciones se pueden realizar usando variables tipo escalar (enteras, reales), vectoriales o matriciales, tipo texto o cadena de caracteres, etc.

Las variables escalares se declaran como variables internas a la función, mientras que las variables vectoriales o matriciales tienen un alcance global.

Referencia: Rodriguez 6.1 p155, Van Rossum p19



Variables dentro de una función

Las variables dentro de una función se tratan como variables de un algoritmo aparte.Por lo que los nombres de las variables internas, no afectan a las variables del algoritmo principal.

Exceptuando el caso de Arreglos y listas que el paso es por «referencia» (o álias), pues se considera que si las matrices y vectores del problema son de gran tamaño, crear copias de cada una de ellas dentro de cada llamada a la función ocupa memoria que podría ser usada para otras tareas.


Estructura del Algoritmo con funciones creadas por usuario

Cuando el algoritmo tiene funciones básicas creadas por usted, y son relativamente «pequeñas», se incluyen dentro del bloque de inicio.

# INICIO
# Referencia del problema
import numpy as np
import random as np
# funciones creadas por usuario
def miprimerafuncion(variableentrada,otravariable):
    # algunas instrucciones
    return(respuesta)

# INGRESO
a = int(input(' un numero entero'))
b = float(input(' un numero real'))

# PROCEDIMIENTO
respuesta =  miprimerafuncion(a,b)

# SALIDA
print('alguna respuesta: ',respuesta)

Si las funciones son varias o siempre usa esas funciones las puede incluir en un archivo .py y llamarlas desde el archivo con el algoritmo principal. Detalles en el siguiente tema publicado.

4.4.1 Listas – Ejemplos y ejercicios con Python

Ejercicios resueltos de programación usando listas en Python

Operaciones de selección de datos desde listas

3Eva_IIIT2003_T2 Socios del club por género

Solución propuesta: s3Eva_IIIT2003_T2 Socios del club por género

Unión e Intersección de listas

3Eva_IT2002_T3 Determinar productos iguales entre vendedores

Solución propuesta: s3Eva_IT2002_T3 Determinar productos iguales entre vendedores

1Eva_IIT2007_T3 Garantías de prestamos IESS

Solución propuesta: s1Eva_IIT2007_T3 Garantías de prestamos IESS

1Eva_IIT2012_T4 Informe de pasantías

Solución propuesta: s1Eva_IIT2012_T4 Informe de pasantías

1Eva_IIT2010_T1 Censo de instrucción por género

Solución propuesta: s1Eva_IIT2010_T1 Censo de instrucción por género

1Eva_IT2010_T1 Bono para televisores en Uruguay

Solución propuesta: s1Eva_IT2010_T1 Bono para televisores en Uruguay


Arreglos y Aleatorios, random, numpy

3Eva_IT2005_T4 Tabla de Pozo millonario

Solución propuesta: s3Eva_IT2005_T4 Tabla de Pozo millonario

1Eva_IIT2005_T3 Entrenamiento atleta: promedios

Solución propuesta:  s1Eva_IIT2005_T3 Entrenamiento atleta: promedios


Ejercicios

sugeridos para desarrollar con listas, siguiendo los  conceptos de ésta unidad.

1Eva_IIT2013_T4 Sorteo series mundial de fútbol

1Eva_IIT2011_T4 Impuestos casillas/envíos del exterior

2Eva_IIT2009_T4 Sortear cupos pre-universitario medicina

2Eva_IIT2002_T4 Juego del Imitador

4.4 Listas como conjuntos en Python

Arreglos: [ índice ][ Vector ] [ Matriz ] || [ cadenas/string ] [listas]

Para el manejo combinado de palabras y números, varias palabras, varias frases, se usa el concepto de Listas.

Las listas operan como un conjunto de datos de diferente tipo: cadenas junto a texto, conteniendo subconjunto de listas con diferentes dimensiones.

Una «lista» de datos como un vector es, por ejemplo, la lista del curso con los nombres de los participantes:

>>> lista = ['Juan','María','Pedro']
>>> lista
['Juan', 'María', 'Pedro']
>>> len(lista)
3
>>> 

Añadir elementos: Append()

Luego ‘Ana’ decide registrarse en el curso, y debe añadirse su nombre a la lista del curso. La instrucción para añadir elementos en la lista es append() que es semejante a la instrucción de concatenar elemantos a un vector o una cadena.

>>> registrar = 'Ana'
>>> listacurso.append(registrar)
>>> listacurso
['Juan', 'María', 'Pedro', 'Ana']
>>> 

Revisar Elemento en Conjunto

Siguiendo con el ejemplo anterior, para revisar si ‘Pedro’ y ‘Carlos’ se encuentra en la lista del curso. Si está en la lista, para identificar la posición o índice donde se encuentra, se usa la instruccion .index().

>>> 'Pedro' in listacurso
True
>>> 'Carlos' in listacurso
False
>>> donde = listacurso.index('Pedro')
>>> donde
2

Video Tutorial

Arreglos: [ índice ][ Vector ] [ Matriz ] || [ cadenas/string ] [listas]


Listas desde cadenas

Una frase se puede dividir en palabras, en referencia a un solo caracter:

>>> frase = 'El saber no ocupa lugar'
>>> palabras = frase.split()
>>> palabras
['El', 'saber', 'no', 'ocupa', 'lugar']
>>> 

Listas de Listas

Las listas pueden agrupar otras listas, las notas individuales de cada estudiante se escribirían:

>>> califica = [['Juan',9],['María',10],['Pedro',6],['Ana',8]]
>>> califica
[['Juan', 9], ['María', 10], ['Pedro', 6], ['Ana', 8]]
>>> califica[2]
['Pedro', 6]
>>> califica[2][0]
'Pedro'
>>> califica[2][1]
6
>>> 

Note que en listas cuando se usa más de un índice, se usan corchetes independientes para cada índice.

Arreglos: [ índice ][ Vector ] [ Matriz ] || [ cadenas/string ] [listas]

4.3.1 Cadenas de caracteres/strings – Ejercicios y Ejemplos con Python

[ ejercicios ] [ ejemplos ]
..


Ejercicios de programación propuestos para el uso de cadenas de caracteres/strings

2Eva_IT2012_T2 Número de tecla en cifrado musical con Python

2Eva_IT2010_T2 Operaciones infix – postfix

2Eva_IIT2009_T1 Mensaje a SMS

2Eva_IT2009_T1 Desordenar una palabra

2Eva_IIT2007_T1 Palabras aleatorias alternando vocal y consonante, genword

2Eva_IT2006_T3 Encriptar a Morse

3Eva_IIT2013_T3 buscar cadena en una frase

3Eva_IT2013_T1 Verificar un Abecegrama

3Eva_IIT2012_T1 Alfabeto radiofónico

3Eva_IIT2008_T1 Contar palabras para un clasificado

3Eva_IT2007_T2 Función para crear Acrónimos

[ ejercicios ] [ ejemplos ]

..


Ejemplos: Ejercicios resueltos de cadenas de caracteres o strings en programación con Python.

2Eva_IIT2012_T2 Cifrado César

Solución Propuesta: s2Eva_IIT2012_T2 Cifrado César

video tutorial: S06T2E1 Cadenas de Caracteres. Cifrado César

2Eva_IT2005_T3 Adivina palabra (ahorcado)

Solución propuesta: s2Eva_IT2005_T3 Adivina palabra (ahorcado)

video tutorial: S06T2E2 Cadenas de Caracteres. Adivina palabra, ahorcado

2Eva_IIT2008_T2 Etiquetar a robots (R2D2)

Solución propuesta: s2Eva_IIT2008_T2 Etiquetar a robots (R2D2)

2Eva_IT2005_T1 Completar cadena con padright

Solución propuesta: s2Eva_IT2005_T1 Completar cadena con padright

2Eva_IT2011_T4 Números Romanos a decimal

Solución propuesta: s2Eva_IT2011_T4 Números Romanos a decimal

[ ejercicios ] [ ejemplos ]

4.3 Cadenas de caracteres/strings – vector de letras en Python

Arreglos: [ índice ][ Vector ] [ Matriz ] || [ cadenas/string ] [listas]

El manejo de texto en computador requiere una representación de los símbolos o letras que se usan en un idioma.

Cada símbolo, letra o «caracter» que se presenta al escribir en pantalla se convierte en una sucesión ordenada de imágenes, semejante a agrupar las fichas del juego Scrabble

Una palabra se puede observar como las casillas de un vector, dando la pauta para el manejo de texto en el computador.

En Python, el texto para los mensajes en las preguntas input y las salidas print se escriben entre comillas " o apóstrofes '. Cada letra de una palabra se puede identificar por su posición como en un vector.

>>> palabra = 'manzana'
>>> len(palabra)
7
>>> palabra[0]
'm'
>>> palabra[4]
'a'
>>> 

Arreglos: [ índice ][ Vector ] [ Matriz ] || [ cadenas/string ] [listas]


Concatenar cadenas o strings

Si al unir palabras se forma una oración, el concepto se extiende a programación como «concatenar«. Básicamente concatenar es la unión de varias palabras para formar una oración un título o un mensaje.

>>> palabra1 = 'El'
>>> palabra2 = 'saber'
>>> frase = palabra1 + palabra2
>>> frase
'Elsaber'
>>> frase = palabra1 + ' ' + palabra2
>>> frase
'El saber'
>>> cadena1 = 'no ocupa lugar'
>>> frase = frase + ' ' + cadena1
>>> frase
'El saber no ocupa lugar'
>>> 

Mayúsculas y Minúsculas con caracteres de letras

Para convertir una frase o palabra a mayúsculas o viceversa, se usan las instrucciones: palabra.upper() y palabra.lower().

Siguiendo el ejemplo anterior, el ejemplo de uso es:

>>> frase
'El saber no ocupa lugar'
>>> enmayusculas = frase.upper()
>>> enmayusculas
'EL SABER NO OCUPA LUGAR'
>>> enminusculas = frase.lower()
>>> enminusculas
'el saber no ocupa lugar'
>>> 

Comparar cadenas o strings

También es posible comparar caracteres, o cadenas entre si, por ejemplo para buscar cuántas vocales tiene una palabra. Considere que los caracteres o ‘dibujos de letras’  mayúsculas son diferentes a los de minúsculas.

>>> letra1 = 'd'
>>> letra1 > 'a'
True
>>> letra1 > 'g'
False
>>> letra1 == 'D'
False
>>> 

Se puede comparar el orden alfabético de los caracteres, pues el computador los almacena en una posición ordenada, semejante a un vector [‘a’,’b’,’c’, … ]

ejemplo con cadenas, o palabras:

>>> fruta1 = 'manzana'
>>> fruta2 = 'pera'
>>> fruta3 = 'manzana'
>>> fruta4 = 'MANZANA'
>>> fruta1 == fruta3
True
>>> fruta1 == fruta2
False
>>> fruta1 == fruta4
False
>>> 

Segmentar o dividir una cadena/string/texto usando split()

Para segmentar o dividir el texto por algún símbolo se dispone de la instrucción frase.split().

En el ejemplo se muestra como se separa la frase

>>> separa = frase.split()
>>> separa
['El', 'saber', 'no', 'ocupa', 'lugar']
>>> separa[1]
'saber'
>>> 

Arreglos: [ índice ][ Vector ] [ Matriz ] || [ cadenas/string ] [listas]

4.2.2 Matrices en programación, Arreglos – Archivo Abrir/Guardar con Numpy

En Python se pueden obtener los datos de las matrices desde archivos, o almacenar las matrices hacia archivos. Así, cuando las matrices son de grandes dimensiones, no será necesario tener que escribir los valores de las matrices cada vez que se requiera hacer una operación.

En librería Numpy , existen funciones incorporadas para guardar o abrir una matriz desde un archivo en formato .txtcon las instrucciones: np.savetxt(), np.loadtxt()


Guardar matriz en archivo.txt con Numpy

Para guardar una matriz a un archivo use:
numpy.savetxt('matriz.txt', matriz)

>>> import numpy as np
>>> matriz = np.array([[1,2,3],[4,5,6]])
>>> matriz
array([[1, 2, 3],
       [4, 5, 6]])
>>> np.savetxt('matriz00.txt',matriz)

se puede encontrar en archivo.txt en el directorio de trabajo de Python

El archivo puede ser abierto para observar desde el «block de notas»


Abrir archivo.txt de una matriz con Numpy

Continuando con el ejercicio anterior, para abrir o leer desde un archivo en formato de texto ‘matriz.txt‘, se dispone de la instrucción de Numpy:
np.loadtxt('matriz.txt',dtype=int)

La instrucción permite indicar el tipo de datos que se usan en el arreglo.

>>> A = np.loadtxt('matriz00.txt',dtype=int)
>>> A
array([[1, 2, 3],
       [4, 5, 6]])

>>> B = np.loadtxt('matriz00.txt')
>>> B
array([[ 1., 2., 3.],
       [ 4., 5., 6.]])

Nota: lo importante es el formato del archivo en tipo texto. Algunas veces los archivos tienen extensión .dat que también pueden ser leídos.