2.6 Cadenas de caracteres para el manejo de texto

Referencia: Van Rossum 3.1.2 p11, Rodriguez 5.6.1 p59, Downey 2.9

El manejo de texto en computadoras, se conoce con el nombre técnico de «cadenas de caracteres».

Una letra del alfabeto, un número, un signo de puntuación, en general: todos los símbolos que están disponibles en el teclado del computador son un dibujo a ser presentado o usado en una pantalla, impresora, etc.

Cada dibujo se identifica con un número y cada dibujo se lo conoce como «caracter» o en idioma inglés «character».

La tabla «caracteres y su número de identificación estandarizado se concoce como Tabla de códigos ASCII (American Standard Code for Information Interchange).

Para visualizar el concepto, por ejemplo se obtiene el código ASCII de un caracter:

>>> ord('a')
97

El proceso contrario para obtener el caracter de un código ASCII es:

>>> chr(97)
'a'

Concatenar para formar palabras

Los símbolos o caracteres se agrupan para formar palabras, frases, párrafos, por lo que internamente se convierten en vectores numéricos de los dibujos o símbolos. A esta agrupación se la conoce como «cadenas» o «strings».

La agrupación de caracteres se conoce como «concatenar». En Python se usa el símbolo «+» para denotar concatenación.

Ejemplo:

>>> a = 'Hola'
>>> b = '¿que tal?'
>>> c =  a+b
>>> c
'Hola¿que tal?'

La operación c = a+b
debe leerse como: "c almacena a concatenado con b",
diferenciando la acción de las operaciones matemáticas de igualdad y suma.

Operaciones y algoritmos

Las operaciones y algoritmos con cadenas de caracteres se desarrollan en la Unidad 4.

Cadenas de caracteres/strings – vector de letras en Python

Cadenas de caracteres/strings – Ejemplos en Python

Cadenas de caracteres/strings – Ejercicios


Otros símbolos con significado diferente al alfabeto

2.5 Acumuladores – Ejemplo con el Algoritmo de la secuencia de Fibonacci

Referencia: Van Rossum 3.2 p16, Rodriguez 6.10.1 p176, Downey 18.4

El acumulador se usa para generar la secuencia de Fibonacci. Para esta actividad, observe el video desde el minuto 3:50 hasta 6:40:
El misterio de las matemáticas. Video NOVA

  1. Describa la secuencia de Fibonacci en un párrafo.
  2. ¿Puede programar la secuencia de Fibonacci? usando solo las operaciones básicas de suma y/o resta.
  3. Describa las operaciones en Python y compruebe sus resultados.

Ejemplo de desarrollo

1Eva_IIT2002_T4 cociente de Fibonacci

Solución propuesta: s1Eva_IIT2002_T4 cociente de Fibonacci

Tutorial: S02T1 Lazos/Bucles y Acumuladores


Qué es la serie de Fibonacci y qué tiene que ver con el número áureo

BBC Mundo 2021-Abril-21

2.4 Contadores y acumuladores – Ejemplos

Ejemplos de ejercicios resueltos sobre contadores y acumuladores en programación con Python. La teoría se describe en el video turorial del enlace:

U3T4 Lazos/Bucles While y Acumuladores

Ejemplos, ejercicios resueltos:

1Eva_IIIT2003_T2 Verificar números triangulares

Solución propuesta: s1Eva_IIIT2003_T2 Verificar números triangulares

1Eva_IIT2002_T4 Cociente de fibonacci

Solución propuesta: s1Eva_IIT2002_T4 Cociente de fibonacci

1Eva_IIT2003_T2 Sumar términos de progresión geométrica

Solución propuesta: s1Eva_IIT2003_T2 Sumar términos de progresión geométrica

1Eva_IIT2002_T1a Tablas de multiplicar

Solución propuesta: s1Eva_IIT2002_T1a Tablas de multiplicar

1Eva_IIT2002_T3 Conjetura de Ullman

Solución propuesta: s1Eva_IIT2002_T3 Conjetura de Ullman

1Eva_IIT2012_T1 Sucesión de Padovan

Solución propuesta: s1Eva_IIT2012_T1 Sucesión de Padovan

Otros ejercicios de contadores y acumuladores pueden ser encontrados en Evaluaciones – ejercicios por Temas en la sección de acumuladores.

2.3 Contadores y Acumuladores en programación

Referencia: Rodriguez 3.3.1 p24, Van Rossum 9.3.3 p73,  Downey 22.9

¿Qué es un contador  en programación? ¿Qué es un acumulador en programación? Simplificando, es un concepto de uso cotidiano que es el resultado de la suma de una serie de números. El concepto y diferencias se puede explicar con los siguientes ejemplos:

¿Qué es un contador en programación? ejemplo

Al visitar el departamento de servicio al cliente en una empresa, los clientes para obtener un turno deben tomar un ticket. Un letrero electrónico indica el número del cliente que se está atendiendo, luego éste número cambia incrementándose en 1 para anunciar el siguiente turno a ser atendido.


El ejemplo, es un uso práctico de un contador, con el que se observan  ciertas características:

  • Siempre tienen un valor inicial
  • Su valor nuevo es el resultado del valor anterior más una constante.

Al inicio del día, el contador debe ser inicializado, de preferencia con 0, cuando un puesto de atención está listo para atención, el contador se incrementa en uno, se escucha una alerta y se puede acercar el cliente con el primer turno.

Las características descritas para forma algorítmica se escriben como:

contador ← 0
contador ← contador + 1

La expresión del literal b se puede leer como: «valor nuevo” de contador es el resultado del «valor anterior» sumado el «valor de 1» o incrementando en 1

Desde luego que los contadores puede sumarse un valor diferente a 1, pero siempre será un valor constante; también pueden tener cambios de forma ascendente, o disminuir desde un valor inicial.

Un ejemplo de contador decreciente se observa en cronometro del microondas para calentar alimentos.

El valor inicial son los segundos que permanecerá encendido. El contador de tiempo disminuye en uno cada segundo y al llegar a 0 se apaga el microondas.

Ejemplo de contador en Python:

>>> contador = 0
>>> contador = contador + 1
>>> contador
1

¿Qué es un acumulador en programación?

Un acumulador en programación es una versión ampliada de un contador. El acumulador  tiene las mismas características que un contador excepto el valor de incremento que es un valor variable.

Por ejemplo, una cuenta de ahorros puede representarse en un algoritmo mediante un acumulador, pues el ahorrista no siempre podrá ahorrar una cantidad fija en la cuenta, un día deposita 10, otro día deposita 30, otro deposita 5.

Con el ejemplo de ahorro, se puede determinar que en el acumulador no siempre se añade un valor positivo, pues cuando se hace un retiro, se puede interpretar como que el valor añadido es negativo.

Las características descritas para forma algorítmica se escriben como:

acumulador ← 0
acumulador ← acumulador + X

La expresión del literal b se para una cuenta puede leer como: «saldo nuevo” de acumulador es el «saldo anterior» de acumulador considerando el deposito (+x) o retiro (-x).

Recordar que:

El concepto de asignar es usado en algoritmos “=” carece de sentido matemático.

Si tomamos como ejemplo el acumulador, si se expresa como una igualdad, se interpretaría como:

acumulador = acumulador + X
acumulador - acumulador = X
0 = X

Cuando en el algoritmo se quiere expresar en realidad es una asignación, por lo que se utiliza el símbolo “←”

acumulador ← acumulador + X

Esta aclaración permite formalizar la diferencia de comparación de igualdad “=” usada dentro de los condicionales.

Ejemplo de acumulador en Python:

>>> acumulador = 0
>>> acumulador = acumulador + 4.5
>>> acumulador
4.5
>>> acumulador = acumulador - 1.3
>>> acumulador
3.2

En la siguiente página se presentan algunos ejemplos como ejercicios resueltos sobre contadores y acumulafores de examenes anteriores.

2.2 Operaciones básicas matemáticas y lógicas en Python

Referencia: Rodriguez 5.6.3 p59, Van Rossum 10.6 p85,  Downey 2.6

Para los ejercicios inicales en programación se muestran algunas operaciones numéricas básicas a partir de algunas variables.

Asignación de valores

En algoritmos se usan las expresiones de asignación para denotar la intención de resolver operaciones y cuyo resultado se almacena en una variable simple, por lo que se expresan de la forma:

c ← a + b
d ← x2 + y2

Debe observar que las asignaciones no son expresiones de igualdad, como las usadas en matemáticas, por lo que su símbolo corresponde a una flecha que apunta el sentido donde se almacena el resultado.


Cociente ó división entera

>>> a = 5
>>> b = 2
>>> c = a//b    
>>> c
2

Cinco manzanas para dos envases de desayunos

Residuo de a para b

>>> a = 5
>>> b = 2
>>> c = a%b
>>> c
1

Exponente a^b

>>> c = a**b
>>> c    
25

Raiz cuadrada \sqrt{a^2 + b^2}

>>> import math
>>> c = math.sqrt((a**2) + (b**2))
>>> c
5.385164807134504

Operaciones Lógicas

Operación Python
y p and q
o p or q
negación not(p)

Suponga que p es verdadero y q es falso

>>> p = 1
>>> q = 0
>>> p and q
0
>>> p or q
1
>>> not(p)
False

Número Aleatorio entero

>>> import random as rnd
>>> dado = int(rnd.random()*6) +1
>>> dado
4

2.1 Tipos de datos numéricos en programación

Referencia: Van Rossum 3.2 p9, Rodriguez 5.6.1 p58, Downey 2.1

Una forma simplificada de clasificar los datos numéricos en programación y semejante a matemáticas es: Escalares o de un solo valor, Vectoriales y matriciales o de un conjunto de valores.
..


Datos numéricos ESCALARES

Las variables numéricas de un solo valor o elemento utilizadas en un algoritmo se clasificarán en enteras, reales, complejas y lógicas.

Variables tipo entero


Es el tipo de variable usada para contar el número de estudiantes presentes en un aula de clases, pasajeros en un bus, barco o avión. Indican la cantidad de elementos: una manzana, cuatro manzanas en un canasto, etc.

La única forma de variable posible a utilizar en estos casos es la tipo entera.

Tipo de datos enteros en Python: int()

>>> a = int(input('escriba un entero: '))
>>> b = 5
>>> c = a*b
>>> type(a)
<class 'int'>

Variables tipo real

Este tipo de variable se usa para escribir por ejemplo el precio de un producto que incluye los centavos, el peso se producto en Kg, el número π.

En estos casos, al escribir con decimales, se los considera como variable tipo real. Ejemplos: $9.99, $89.32, 1.268Kg, 3.1416

Tipo de datos reales en Python: float()

>>> g = float(input('escriba un real')
>>> valor = 3.1415927
>>> type(valor)
<class 'float'>

Tipo de datos complejos en Python: complex(,)

>>> w = complex(1,.5)
>>> w
(1+0.5j)
>>> type(w)
<class 'complex'>
>>> w.real
1.0
>>> w.imag
0.5
>>> w.conjugate()
(1-0.5j)

Variables tipo Booleana

Se usan en lógica matemática como valor verdadero 1 y falso 0.

Tienen aplicaciones como en asistencia a clases:
presente=0, presente=1,
y pueden sustituir símbolos como √ para asistencia y X para una ausencia.

>>> tarea = True
>>> leccion = False
>>> aprender = tarea and leccion
>>> aprender
False
>>> asiste = tarea or leccion
>>> asiste
True
>>> esperanza = not(leccion)
>>> esperanza
True
>>> examen = 1
>>> leccion = 1
>>> tarea = 0
>>> aprendizaje = leccion and tarea
>>> aprendizaje
0
>>> estudia = leccion or tarea
>>> estudia
1
>>> aprueba = examen and leccion and tarea
>>> aprueba
0

Para el desarrollo de algoritmos se describirán solo estos tipos numéricos como grupos principales. Para el caso de lenguajes de programación se definirán otros subtipos: entero, entero largo, real, real doble, etc.

..


VECTORES Y MATRICES en programación

Usados por ejemplo para tabular la cantidad e manazanas en los arboles de un huerto como control de producción por árbol.

La fila de un huerto es el vector, cada árbol es el índice del vector, la cantidad de manzanas producidas es el valor de cada casilla del vector.

huerto
árbol 1 2 3
manzanas 15 18 17

tamano del vector=3

ARREGLOS

Arreglos de una dimensión o vectores, requieren importar numpy. Las librerias numpy incoporan muchas operaciones de vectores y matrices usadas en otros cursos como algebra lineal (http://blog.espol.edu.ec/matg1049/)

Vectores – Arreglos de una dimensión

Por ejemplo: las notas de 1ra, 2da y 3ra evaluación se pueden escribir en un vector.

vector = \begin{pmatrix}7.2 \\ 8.4 \\ 9.23\end{pmatrix}
>>> import numpy as np
>>> vector = np.array([7.2, 8.4, 9.23])
>>> type(vector)
<class 'numpy.ndarray'>

los vectores pueden contener escalares de tipo entero, real o complejo, como se usan en matemáticas.

Matrices – Arreglos de dos dimensiones

matriz = \begin{pmatrix}1.2 && 2.45 && 5.3 \\ 0.3 && 1.75 && 4.89\end{pmatrix}

matrices requieren importar numpy

>>> matriz=numpy.array([[1.2, 2.45, 5.3],
                        [0.3, 1.75, 4.89]])
>>> type(matriz)
<class 'numpy.ndarray'>
>>> matriz
array([[ 1.2 , 2.45, 5.3 ],
       [ 0.3 , 1.75, 4.89]])

las matrices de igual manera pueden contener valores de de tipo entero, real o complejo, etc. acorde al problema a realizar.


LISTAS

Otra forma de escribir vectores y matrices es usar listas.
Para uso de matemáticas, cálculo numérico o algebra se recomienda usar arreglos, pues las librerías (numpy) están optimizadas para el uso de arreglos.

Ejemplo de un vector como lista:

>>> vector = [1,4,2,1]
>>> type(vector)
<class 'list'>

Ejemplo de una matriz como lista:

>>> matriz = [[1,2,3,4],
              [5,6,7,8]]
>>> type(matriz)
<class 'list'>
>>> matriz[0][2]
3
>>>

En el caso de vectores y matrices numéricos es preferible usar arreglos por la disponibilidad de operaciones numéricas, algebraicas disponibles en la libreria Numpy.