7.1 Archivos texto – Guardar. Ejemplo

«Archivos de texto» es una forma básica de almacenar información, permite transferir o compartir los datos de una forma estándar para ser usada (importada) por una gran cantidad de programas editores de texto, hojas electrónicas, procesamiento de datos, etc.

Se presentan ejemplos, ejercicios y resumen en cada sección procesar datos desde o hacia un archivo de texto.

Agenda de contactos telefónicos

Para disponer de una agenda de contactos telefónicos y no perder los datos cuando se cierra Python o se apaga el computador, se almacena los datos en un archivo.

Ejemplo 1: Guardar archivo

Los datos básicos de un contacto telefónico se describen como un registro.

registro: un nombre, un apellido y un número telefónico.

Ejecuta las siguientes instrucciones y observa el resultado en el archivo con nombre ‘miscontactos.txt’ en el directorio de trabajo

nombre = 'Juan'
apellido = 'Leon'
telefono = '0987654321'
nombrearchivo = 'miscontactos.txt'

# Archivo en modo escritura 'write'
archivo = open(nombrearchivo,'w')
unregistro = nombre + ',' + apellido +','+telefono +'\n'
archivo.write(unregistro)
archivo.close()  # Cierra el archivo

print('se ha guardado:',nombrearchivo)

archivo guardar ejemplo 01

Para usar un archivo, se «abre» usando la instrucción open() , luego de escribir los datos se debe «cerrar» close() y no se realizan mas instrucciones sobre el archivo. El tipo de uso del archivo se indica mediante una letra ‘w’ (inicial de write) para escritura.

Los datos de un contacto se escriben separados por ‘,’ en una sola línea, para ésto se crea la cadena «unregistro» y se la envía al archivo mediante la instrucción archivo.write().


Ejercicio 1

Como una persona tiene más de un contacto telefónico, el ejercicio consiste en guardar al menos tres en el archivo «miscontactos3.txt«.
Al ejecutar las instrucciones, al final comprueba que los datos se encuentren registrados abriendo el archivo.

Nota: Para separar cada registro por cada línea, se crea una cadena de caracteres finalizada con un salto de línea ‘\n’

texto resultado

 

6.1.1 Diccionarios – Ejemplos

[ Diccionario ] [ Ejemplos ] [ Ejercicios ]

Ejercicios resueltos con diccionarios en Python

2Eva_IT2015_T1 kutipak() quichua-español

Solución propuesta: s2Eva_IT2015_T1 kutipak() quichua-español

2Eva_IT2006_T1 Donaciones defensa civil

Solución Propuesta: s2Eva_IT2006_T1 Donaciones defensa civil

2Eva_IT2005_T4 Registrar mejores calificaciones

Solución Propuesta: s2Eva_IT2005_T4 Registrar mejores calificaciones

3Eva_IT2009_T3 Aspirantes a escuela de policia

Solución Propuesta: s3Eva_IT2009_T3 Aspirantes a escuela de policía

2Eva_IT2010_T3 Registrar donantes ONTOT

Solución propuesta: s2Eva_IT2010_T3 Registrar donantes ONTOT


[ Diccionario ] [ Ejemplos ] [ Ejercicios ]

6.1 Diccionarios en Python

[ Diccionario ] [ Ejemplos ] [ Ejercicios ]

Referencia: Rodríguez 7.7 p317, Van Rossum p33.

Los diccionarios son colecciones de datos con un formato que permite definir y acceder a sus componentes únicamente mediante una "clave". Cada componente de un diccionario es un par "clave:valor". El diccionario se define con corchetes "{}" y sus parejas de datos se separan con dos puntos «:».

Las claves deben ser únicas dentro del mismo diccionario.

Por ejemplo, para un diccionario entre quichua-español, se emparejan palabras entre los idiomas de la forma:

diccionario = {'man':'al',
               'wasi':'casa',
               'pak':'del',
               'kuska':'lugar',
               'pash':'y',
               'iyayku':'tecnología',
               'mañay':'servicio',
               'mamallakta':'país',
               'kutipak ':'traductor'}

para acceder al valor de una entrada o clave se usa formato de diccionario[entrada], y para consultar las entradas o claves se usa diccionarios.keys()

>>> diccionario['wasi']
'casa'
>>> diccionario.keys()
dict_keys(['man', 'wasi', 'pak', 'kuska', 'pash', 'iyayku',
 'mañay', 'mamallakta', 'kutipak '])
>>> 

Los valores se pueden pedir con diccionario.values() y la cantidad de entradas se encuentra con len().

>>> diccionario.values()
dict_values(['al', 'casa', 'del', 'lugar', 'y',
 'tecnología', 'servicio', 'país', 'traductor'])
>>> len(diccionario)
9
>>> 

Agregar elementos al diccionario una vez creado sigue un formato ya familiar de usar. Para el ejemplo se inicializa un diccionario vacio:

>>> diccionario ={}
>>> diccionario['wasi']='casa'
>>> diccionario
{'wasi': 'casa'}
>>> diccionario.update([['lugar','pash']])
>>> diccionario
{'wasi': 'casa', 'lugar': 'pash'}
>>> 

Los valores del diccionario asignados a la clave pueden ser datos simples o datos estructurados de tipo lista, tupla, conjunto o diccionario.

[ Diccionario ] [ Ejemplos ] [ Ejercicios ]

 

5.6 Funciones de usuario – Crear archivo para librerías de usuario en Python

Los algoritmos que se reutilizan y se convierten a funciones, se pueden agrupar en un archivo.py. Esto permite crear un archivo como librerías con funciones personalizadas.

Las librerías se pueden llamar por la instrucción import y se usan individualmente por el nombre de la función().

Ejemplo – archivo de librerías personalizadas

Para le ejemplo se crean dos funciones sumando(a,b) e invierteletras(palabra)  en un solo archivo politoESPOL.py, en directorio de trabajo:

# ejemplo de libreria de funciones
def sumando(a,b):
    c = a + b
    return(c)

def invierteletras(palabra):
    n = len(palabra)
    invertida = ''
    for i in range(0,n,1):
        invertida = palabra[i] + invertida
    return(invertida)

Archivo de programa principal politoProgram.py  que lo va a usar en el mismo directorio de trabajo donde se encuentra el archivo politoESPOL.py,de las funciones anteriores. Esta ubicación permite realizar la llamada import politoESPOL as espol.

# probando importar funciones
import politoESPOL as espol

# INGRESO
a = 3
b = 5
palabra = 'polito'

# PROCEDIMIENTO
sumado = espol.sumando(a,b)
alreves = espol.invierteletras(palabra)

# SALIDA
print('la suma es: ', sumado)
print('palabra invertida: ',alreves)

con lo que el resultado del algoritmo y las funciones personalizadas es:

la suma es:  8
palabra invertida:  otilop
>>> 

5.5 Funciones – librerías en Python

Algunas librerías vienen en la instalación básica de Python, como por ejemplo:

Revisar en el enlace: https://docs.python.org/2/library/math.html

La librería math contiene funciones matemáticas, para usarla se la llama al inicio (import):

import math

para luego usarla como en los ejemplos .

math.sqrt(4)
math.sin(0.4)
math.cos(0.3)
math.tan(0.45)

Aleatorios se pueden obtener al importar la librería random

import random as rnd

ejemplo de un dado se obtiene como:

dado=int(rnd.random()*6)+1

Otras librerías se desarrollan por diferentes comunidades y se deben incorporar a la instalación. Revisar sección Descargas

Librerías para Arreglos: Matrices, Vectores pip install numpy

Numpy es una librería de funciones para manejo de matrices y vectores en matemáticas y álgebra.

https://www.numpy.org/

import numpy as np
np.zeros(n, dtype=int)
np.zeros(shape=(n,n), dtype=int)
np.arange(2, 10, dtype=np.float)
np.linspace(1., 4., 6)
np.sin()
np.cos()
np.random.random()

Librerías para Gráficas

de funciones en los planos cartesianos, ver sección para graficas usan las librerías matplotlib: https://matplotlib.org/

import matplotlib.pyplot as plt

Existen algunas versiones empaquetadas de Python que permiten disponer de las librerías científicas preinstaladas. El proceso de instalación es simplificado y se encuentra en la sección WinPython (portable)

Ejemplos de cómo usar las librerías gráficas se dan en la Unidad 8 Gráficas básicas de funciones

5.4 Funciones Recursivas – Conceptos y ejercicios resueltos

Referencia: Rodríguez 6.0 p168

Una función recursiva muy conocida y definida en la matemática es el factorial. El factorial tiene la característica que se puede llamar a si misma.

5! = 5x4!
       4! = 4x3!
              3! = 3x2!
                     2! = 2x1!
           por definición   1! = 1

Se interpreta que para encontrar 5! requerimos la respuesta de 4!.
Para encontrar 4! se debe calcular 3! y así sucesivamente,
hasta llegar al valor inicial de la función que es 1!=1

La solución se interpreta  hacia atrás,  empezando desde la respuesta conocida de 1! =1 y reemplazando los valores en las operaciones que esperaban por resolver:

5! = 5x4! = 5x24 = 120
       4! = 4x3! = 4x6 = 24
              3! = 3x2! = 3x2 = 6
                     2! = 2x1! = 2x1 =2
           por definición   1! = 1

Observamos que la función recursiva tiene: valores iniciales, que se llama a si misma, y de forma matemática tiene una forma elegante de escribirse:

n! = \begin{cases} 1 && n=1 \\ n(n-1)! && n>1\end{cases}

Escribir la función recursiva en un algoritmo consiste en transcribir paso a paso lo descrito en forma matemática.

# factorial en forma recursiva

def factorial(n):
    if n==1:
        resultado = 1
    if n>1:
        resultado = n*factorial(n-1)
    return(resultado)

una vez que se ejecuta el algoritmo para que esté disponible en memoria, se usa llamando a la función

>>> factorial(5)
120
>>> factorial(1)
1
>>> factorial(4)
24
>>> 

Existen otras funciones recursivas en matemáticas que se pueden fácilmente convertir a algoritmos como Fibonacci, Padovan,  incluso algunas que funcionan en parejas como Par e impar. Se muestran algunas en la sección de ejemplos.

Observaciones de uso

Sin embargo, hay que considerar que la recursividad se usa con precaución, pues las llamadas generan otra instancia que puede saturar la capacidad del computador.

Matrioshka. Muñeca tradicional rusa, hueca con más muñecas en su interior.

En el ejemplo se observa que se tienen operaciones en espera de resultados de la siguiente respuesta, cada llamada usa memoria, tiempo de cómputo como recursos.

Por ejemplo, al intentar de obtener factorial(1000) en forma recursiva, se obtiene un error "RecursionError: maximum recursion depth exceeded in comparison".

Los lenguajes de programación tienen como límite máximo de llamadas recursivas, para evitar saturar los recursos disponibles de memoria y tiempo computacional.


Ejercicios resueltos

2Eva_IIT2007_T4 Fibonacci recursiva

Solución propuesta: s2Eva_IIT2007_T4 Fibonacci recursiva

2Eva_IT2007_T1 Funciones par e impar recursivas

Solución Propuesta: s2Eva_IT2007_T1 Funciones par e impar recursivas

3Eva_IT2004_T3 Multiplicar con campesino egipcio

Solución Propuesta: s3Eva_IT2004_T3 Multiplicar con campesino egipcio


Ejercicios

2Eva_IT2005_T2 Calcular potencia recursiva

2Eva_IIT2012_T1 Recursiva Multi

5.3.3 Funciones – Matrices con arreglos, ejercicios resueltos

Ejemplos, ejercicios resueltos con funciones

2Eva_IIT2008_T3 Crear un Calendario

Solución propuesta con video: s2Eva_IIT2008_T3 Crear un Calendario

2Eva_IIT2003_T2 Mostrar un triángulo de Pascal

Solución propuesta: s2Eva_IIT2003_T2 Mostrar un triángulo de Pascal

3Eva_IT2003_T1 Raíces enteras positivas del polinomio

Solución propuesta: s3Eva_IT2003_T1 Raíces enteras positivas del polinomio

2Eva_IT2014_T3 Imagen RGB a gris

Solución propuesta: s2Eva_IT2014_T3 Imagen RGB a gris

Nota:  requiere el tema 2 sobre funciones. 2Eva_IT2014_T2 Función color RGB a gris

Solución propuesta: s2Eva_IT2014_T2 Función color RGB a gris

2Eva_IT2013_T2 Una Tabla de Bingo con arreglos

Solución propuesta: s2Eva_IT2013_T2 Una Tabla de Bingo con arreglos

Nota:  requiere el tema 1 sobre funciones: 2Eva_IT2013_T1 Función sorteoentre(k,a,b)

Solución propuesta: s2Eva_IT2013_T1 Función sorteoentre(k,a,b)

Tareas

2Eva_IT2012_T3 Consumo de tinta y negativo de foto

2Eva_IIT2011_T2 Ubicar ficha en tablero

5.3.2 Funciones – Ejercicios numéricos y cadenas en Python

Se listan algunos ejercicios sobre funciones con operaciones numéricas y otra para ser realizadas con cadenas de caracteres.

Funciones con operaciones Numéricas

2Eva_IT2014_T2 Función color RGB a gris

2Eva_IIT2011_T1 Algoritmo de Euclides MCD

2Eva_IIT2013_T3 Encriptar binarios con XOR

2Eva_IT2003_T1 Funciones promedio, mayor y menor

2daEva_IIT2004_T3 Reciclar vasos


Funciones con cadenas de caracteres

2Eva_IIT2009_T1 Mensaje a SMS

2Eva_IIT2014_T3 Palabras monovocalicas en frase

2Eva_IIT2015_T1 función lipovocal(frase)

2Eva_IT2006_T3 Encriptar a Morse

2Eva_IT2009_T1 Desordenar una palabra

2Eva_IT2014_T1 Palabras con eco


Funciones con Arreglos – matrices

3Eva_IT2010_T2 Funciones ocupados y ubica libre en matriz

3Eva_IIT2010_T1 Matriz con aleatorios no repetidos (desordena)

3Eva_IIT2015_T4 Orientar código QR (Quick Response Code)