Desarrollo de Aplicaciones I

Importante

"No piense que la programación no es para usted."

 

Eso no está permitido :)

 

Todos tenemos ritmos diferentes. Es cuestión de codificar y codificar hasta dominar el lenguaje.

Sugerencias

- Centre su atención en el material proporcionado

- Evite usar otras fuentes de información diferentes a las proporcionadas porque lo distraerán del sentido de la clase y la secuencia buscada para alcanzar los objetivos.

- Dispone de la ayuda del docente, por lo que puede hacer las consultas respectivas.

1. Programación en Python

1.1 Comprendiendo la programación

En cierto modo, necesitas dos habilidades para ser programador:

  • Primero, necesitas saber un lenguaje de programación (Python)

  • Segundo, debes “contar una historia”. Al escribir un relato, combinas palabras y frases para comunicar una idea al lector.

Relato - programa

Idea - problema

1.2 Palabras y frases

  • El “vocabulario” de las personas con las “palabras reservadas” en Python.
  • Palabras especiales, como por ejemplo las que usamos con un perro: siéntate, camina, quieto, tráelo.

1.3 Conversando con Python

Para conversar con Python, tienes dos opciones

 

Recomendación 1: de forma local puede usar un editor de texto como https://code.visualstudio.com/download

Hay muchos otros editores: Sublime Text, Atom, Brackets, Notepad++, Vim ....

Recomendación 2: instale Git - https://git-scm.com/downloads

1.4 Intérprete y compilador

Python es un lenguaje de alto nivel 

Java, C++, Ruby, PHP...

La CPU, no entiende los lenguajes de alto nivel, únicamente lenguaje de máquina o código de máquina

 

010100110001000010101010101111010011

101000010001010010100100010110001010

....

1.4 Intérprete y compilador

 

  • Un compilador necesita que le entreguen el programa completo en un fichero, y luego ejecuta un proceso para traducir el código fuente de alto nivel a código máquina, tras lo cual coloca ese código máquina resultante dentro de otro fichero para su ejecución posterior (.exe, .dll).

Los traductores de lenguajes de programación forman dos categorías generales: (1) intérpretes y (2) compiladores:

  • Un intérprete lee el código fuente de los programas tal y como ha sido escrito por el programador, lo analiza, e interpreta sus instrucciones sobre la marcha.

1.4 Intérprete y compilador

Al abril un fichero ejecutable con un editor de texto resultaría algo así:

^?ELF^A^A^A^@^@^@^@^@^@^@^@^@^B^@^C^@^A^@^@^@\xa0\x82
^D^H4^@^@^@\x90^]^@^@^@^@^@^@4^@ ^@^G^@(^@$^@!^@^F^@
^@^@4^@^@^@4\x80^D^H4\x80^D^H\xe0^@^@^@\xe0^@^@^@^E
^@^@^@^D^@^@^@^C^@^@^@^T^A^@^@^T\x81^D^H^T\x81^D^H^S
^@^@^@^S^@^@^@^D^@^@^@^A^@^@^@^A\^D^HQVhT\x83^D^H\xe8

..

1.5 Escribir un programa

Cuando queremos escribir un programa, usamos un editor de texto para escribir las instrucciones de Python en un fichero, que recibe el nombre de script.


Por convención, los scripts de Python tienen nombres que terminan en .py.

1.6 ¿Qué es un programa?

Podemos definir un programa, en su forma más básica, como una secuencia de declaraciones o sentencias que han sido diseñadas para hacer algo.

1.7 Errores

Debemos tener mucha precisión cuando escribimos código Python. El menor error provocará que Python se niegue a hacer funcionar tu programa.

1.8 Tipos de errores

A medida que tus programas vayan aumentando su complejidad, te encontrarás con tres tipos de errores generales: Sintaxis, lógicos y semánticos:

 

1. Errores de sintaxis: significa que has violado las reglas “gramaticales” de Python.

2. Errores lógicos: existe un error en el orden de las sentencias o en la forma en que están relacionadas unas con otras.

"Toma un trago de tu botella de agua, ponla en tu mochila, camina hasta la biblioteca y luego vuelve a enroscar la tapa de la botella"

1.8 Tipos de errores

3. Errores semánticos: un error semántico ocurre cuando la descripción que has brindado de los pasos a seguir es sintácticamente perfecta y está en el orden correcto, pero sencillamente hay un error en el programa.

"Juan va a casa de Luisa y encuentra a su mamá sentada en el sofá"

1.9 Depurando los programas

Depurar es el proceso de encontrar la causa o el origen de ese error en tu código (bug). Hay 4 cosas que debes hacer:

 

  1. Leer: revisar el código
  2. Ejecutar: prueba haciendo cambios y ejecutando diferentes versiones
  3. Pensar detenidamente: ¡Toma tu tiempo para pensar!

  4. Retroceder: En algún momento, lo mejor que podrás hacer es dar marcha atrás

2. Variables, expresiones y sentencias

2.1 Valores y tipo

Un valor es una de las cosas básicas que utiliza un programa, como una letra o un número - Es un dato.

Ejemplo:

  • 2 es un entero (int), y
  • “¡Hola, mundo!” es una cadena (string)

2.2 Variable

Una variable es un nombre que se refiere a un valor.

mensaje = 'Hola programadores'
n = 17
pi = 3.1415926535897931

2.3 Nombres de variables y palabras claves

  • Los nombres de las variables pueden ser arbitrariamente largos.
  • Pueden contener tanto letras como números, pero no pueden comenzar con un número.
  • Se pueden usar letras mayúsculas, pero es buena idea comenzar los nombres de las variables con una letras minúscula.

2.4 Sentencias

Una sentencia es una unidad de código que el intérprete de Python puede ejecutar.

2.5 Operadores y operandos

Los operadores son símbolos especiales que representan cálculos: + - / *

>>> 2 + 2
4
>>> 13 - 4 * 2
5

2.6 Expresiones

Una expresión es una combinación de valores, variables y operadores.

2.7 Orden de las operaciones

Cuando en una expresión aparece más de un operador, el orden de evaluación depende de las reglas de precedencia - PEMDSR - PEMDAS

 

  • Paréntesis ()
  • Exponentes **
  • Multiplicación y división * /
  • Suma y resta + -

2.8 Operador módulo

El operador módulo trabaja con enteros y obtiene el resto de la operación consistente en dividir el primer operando por el segundo.

>>> 7 % 3
1

2.9 Operaciones con cadenas

El operador + concatena cadenas.

>>> primero = '100'
>>> segundo = '150'
>>> print(primero + segundo)
100150

2.10 Petición de información al usuario

Python proporciona una función interna llamada input que recibe la entrada desde el teclado.

>>> nombre = input('¿Como te llamas?')
¿Como te llamas?

2.11 Comentarios

Es buena idea añadir notas o comentarios a tus programas, para explicar en un lenguaje normal qué es lo que el programa está haciendo. 

 

Símbolo #

2.12 Elección de nombres de variables mnemónicos

a = 35.0 
b = 12.50 
c = a * b 
print(c)

horas = 35.0
tarifa = 12.50
salario = horas * tarifa
print(salario)

x1q3z9ahd = 35.0
x1q3z9afd = 12.50
x1q3p9afd = x1q3z9ahd * x1q3z9afd
print(x1q3p9afd)

2.13 Depuración

3. Ejecución condicional

3.1 Expresiones boleanas

Una expresión booleana es aquella que puede ser verdadera (True) o falsa (False) -

 

True y False son de tipo bool o booleano.

x == y # x es igual que y
x != y # x es distinto de y
x > y  # x es mayor que y
x < y  # x es menor que y 
x >= y # x es mayor o igual que y
x <= y # x es menor o igual que y
x is y # x es lo mismo que y
x is not y # x no es lo mismo que y

3.2 Operadores lógicos

Existen tres operadores lógicos: and (y), or (o), y not (no).

3.3 Ejecución condicional

Las sentencias condicionales nos proporcionan la capacidad de comprobar condiciones y cambiar el comportamiento del programa de acuerdo a ellas.

if x > 0 :
	print('x es positivo')

3.4 Ejecución alternativa

La ejecución alternativa, es un if en la cual existen dos posibilidades y la condición determina cual de ellas será ejecutada.

if x%2 == 0 : 
  	print('x es par')
else :
	print('x es impar')

3.5 Condicionales anidados

Un condicional puede también estar anidado dentro de otro.

3.6 Condicionales encadenados

3.7 Captura de excepciones usando try y except

Existen estructuras de ejecución condicional dentro de Python para manejar  errores esperados e inesperados, llamadas try / except.

3.8 Evaluación en cortocircuito de expresiones lógicas

Cuando la evaluación de una expresión lógica se detiene debido a que ya se conoce el valor final, eso es conocido como cortocircuitar la evaluación. Ejemplo:

x >= 2 and (x/y) > 2

3.9 Depuración

4. Funciones

4.1 Llamadas a funciones

Una función es una secuencia de sentencias que realizan una operación y que reciben un nombre

4.2 Funciones internas

Python proporciona un número importante de funciones internas, que pueden ser usadas sin necesidad de tener que definirlas previamente.

 

Ejemplo: max(), min(), len()

4.3 Funciones de conversión de tipos

Python también proporciona funciones internas que convierten valores de un tipo a otro.

 

Ejemplo: int(), float(), str()

4.4 Funciones matemáticas

Python tiene un módulo matemático (math), que proporciona la mayoría de las funciones matemáticas habituales (seno, conseno, logaritmo, tangente...).

3.4 Funciones matemáticas

La fórmula general para calcular la relación de dos valores de sonido en decibelios es:

 

Relación en decibelios = 10 log10 (Valor grande / Valor pequeño)

 

Por ejemplo, si tenemos un sonido de 50 dB y otro sonido de 80 dB, podemos calcular la relación de sonido entre ellos usando la fórmula:

 

Relación en decibelios = 10 log10 (80 / 50) = 6,02 dB

4.5 Números aleatorios

A partir de las mismas entradas, la mayoría de los programas generarán las mismas salidas cada vez, que es lo que llamamos comportamiento determinista.

 

Para ciertas aplicaciones, sin embargo, queremos que el resultado sea impredecible.

4.6 Añadiendo funciones

Una definición de función especifica el nombre de una función nueva y la secuencia de sentencias que se ejecutan cuando esa función es llamada.

La primera línea de la definición de la función es llamada la cabecera; el resto se llama el cuerpo.

4.6 Definición y usos

4.8 Flujo de ejecución

4.9 Parámetros y argumentos

Dentro de las funciones, los argumentos son asignados a variables llamadas parámetros.

4.10 Funciones productivas y funciones estériles

Algunas de las funciones que estamos usando, como las matemáticas, producen resultados; a falta de un nombre mejor, las llamaremos funciones productivas (fruitful functions). Otras funciones, como muestra_dos_veces, realizan una acción, pero no devuelven un valor. A esas las llamaremos funciones estériles (void functions).

4.11 ¿Por qué funciones?

  • El crear una función nueva te da la oportunidad de dar nombre a un grupo de sentencias, lo cual hace tu programa más fácil de leer, entender y depurar.

  • Las funciones pueden hacer un programa más pequeño, al eliminar código repetido. Además, si quieres realizar cualquier cambio en el futuro, sólo tendrás que hacerlo en un único lugar.

  • Dividir un programa largo en funciones te permite depurar las partes de una en una y luego ensamblarlas juntas en una sola pieza.

  • Las funciones bien diseñadas a menudo resultan útiles para otros muchos programas. Una vez que has escrito y depurado una, puedes reutilizarla.

4.12 Depurar

5. Iteraciones

5.1 Actualización de variables

Uno de los usos habituales de las sentencias de asignación consiste en realizar una actualización sobre una variable en la cual el valor nuevo de esa variable depende del antiguo.

 

x = x + 1

5.2 La sentencia While

Es útil para repetir tareas idénticas o similares.

n=5
while n > 0:
	print(n)
	n=n-1 
print('¡Despegue!')

5.3 Bucles Infinitos

5.4 "Bucles Infinitos" y break

Se puede crear un ciclo infinito y usar la sentencia break para salir de él cuando lo desee.

5.5 Ejemplo práctico usando break

5.6 Finalizar iteraciones con continue

La sentencia continue para pasar a la siguiente iteración sin terminar la ejecución del cuerpo del bucle.

5.7 Ejemplo práctico usando continue

5.7 Bucles definidos usando for

Cuando se tiene una lista de cosas para recorrer, se puede construir un bucle definido usando una sentencia for.

frutas = ["manzana", "banano", "naranja"]
for fruta in frutas:
  print(fruta)

Salida:
manzana
banana
naranja

5.8 Diseño de bucles

Los bucles generalmente se construyen así:

 

• Se inicializan una o más variables antes de que el bucle comience.

• Se realiza alguna operación con cada elemento en el cuerpo del bucle, posiblemente cambiando las variables dentro de ese cuerpo.

• Se revisan las variables resultantes cuando el bucle se completa

5.8.1 Bucles de recuento y suma

5.8.2 Bucles de máximos y mínimos

5.9 for i in range()

5.10 Depuración

6. Cadenas

6.1 Una cadena es una secuencia

Una cadena es una secuencia de caracteres.

fruta = 'manzana'
letra = fruta[1]

m      a      n      z       a      n       a

[0]

[1]

[2]

[3]

[4]

[5]

[6]

6.2 Obtener el tamaño de una cadena usando len

len es una función nativa que devuelve el número de caracteres en una cadena

m      a      n      z       a      n       a

[0]

[1]

[2]

[3]

[4]

[5]

[6]

6.3 Recorriendo una cadena mediante un bucle

letra = 'manzana'
indice = 0
while indice < len(fruta):
    letra = fruta[indice]
    print(letra)
    indice = indice + 1

m      a      n      z       a      n       a

[0]

[1]

[2]

[3]

[4]

[5]

[6]

6.3 Ejercicio

Escribe un bucle while que comience con el último carácter en la cadena y haga un recorrido hacia atrás hasta el primer carácter en la cadena, imprimiendo cada letra en una línea independiente.

6.4 Rebanado de una cadena

Un segmento de una cadena es llamado rebanado (slice).

s = 'Amo Python'
print(s[0:3])
print(s[4:10])

El operador [n:m] retorna la parte de la cadena desde el “n-ésimo” carácter hasta el “m-ésimo” carácter, incluyendo el primero pero excluyendo el último.

m      a      n      z       a      n       a

[0]

[1]

[2]

[3]

[4]

[5]

[6]

6.4 Ejercicio

Dado que fruta es una cadena, ¿qué devuelve fruta[:]?

6.5 Las cadenas son inmutables

>>> saludo = 'Hola, mundo!'
>>> saludo[0] = 'J'
TypeError: 'str' object does not support item assignment

6.6 Iterando y contando

Ejercicio: Escriba un programa en Python que cuente cuántas veces aparece la letra 'a' en una cadena.

Ejercicio: Encapsula el código anterior en una función llamada cuenta, y hazla genérica de tal modo que pueda aceptar una cadena y una letra como argumentos.

6.7 Operador in

La palabra in es un operador booleano que toma dos cadenas y regresa True si la primera cadena aparece como una subcadena de la segunda

6.8 Comparación de cadenas

Los operadores de comparación (==) funcionan en cadenas.

6.9 Métodos de cadenas

Los cadenas son un ejemplo de objetos en Python. Un objeto contiene tanto datos (el valor de la cadena misma) como métodos, los cuales son efectivamente funciones que están implementadas dentro del objeto y que están disponibles para cualquier instancia del objeto.

6.9 Métodos de cadenas

Ejercicio: Hay un método de cadenas llamado count. Lee la documentación de este método en:

https://docs.python.org/library/stdtypes.html#string-methods

Programa un script que cuente el número de veces que una letra aparece en “manzana”.

6.10 Analizando cadenas

Ejercicio: De la siguiente cadena se desea obtener unp.edu.ni:

From pedro.reyes@unp.edu.ni Sat Jan 5 09:14:16 2023

6.11 El operador formato y f-string

6.12 Depuración

while True:
  linea = input('> ') 
  if linea[0] == '#' :
  	continue
  if linea == 'fin':
  	break
  print(linea)
print('¡Terminado!')

¿Qué pasa si dejamos vacía la entrada y damos enter?

7. Archivos

7.1 Persistencia

7.2 Abrir archivos

7.3 Archivos de texto y líneas

Un archivo de texto puede ser considerado como una secuencia de líneas, así como una cadena de Python puede ser considerada como una secuencia de caracteres.

7.4 Lectura de archivos

Aunque el manejador de archivo no contiene los datos de un archivo, es bastante fácil utilizarlo en un bucle for para leer a través del archivo y contar cada una de sus líneas

7.5 Búsqueda a través de un archivos

Aunque el manejador de archivo no contiene los datos de un archivo, es bastante fácil utilizarlo en un bucle for para leer a través del archivo y contar cada una de sus líneas

Ejercicio: queremos leer un archivo y solamente imprimir las líneas que comienzan con el prefijo “From:”, podríamos usar el método de cadenas startswith para seleccionar solo aquellas líneas con el prefijo deseado:

7.6 Permitir al usuario elegir el nombre del archivo

Esto es sencillo de hacer leyendo el nombre de archivo del usuario utilizando input

7.7 Utilizando try except y open

Esto es sencillo de hacer leyendo el nombre de archivo del usuario utilizando input

7.8 Escritura de archivos

Para escribir en un archivo, tienes que abrirlo en modo “w” (de write, escritura)

7.9 Depuración

Para escribir en un archivo, tienes que abrirlo en modo “w” (de write, escritura)

Desarrollo de Aplicaciones I

By Wilfredo Meneses

Desarrollo de Aplicaciones I

  • 323