Wilfredo Meneses
Profesor universitario
"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.
- 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.
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
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
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
....
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.
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
..
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.
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.
Debemos tener mucha precisión cuando escribimos código Python. El menor error provocará que Python se niegue a hacer funcionar tu programa.
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"
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á"
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:
Pensar detenidamente: ¡Toma tu tiempo para pensar!
Retroceder: En algún momento, lo mejor que podrás hacer es dar marcha atrás
Un valor es una de las cosas básicas que utiliza un programa, como una letra o un número - Es un dato.
Ejemplo:
Una variable es un nombre que se refiere a un valor.
mensaje = 'Hola programadores'
n = 17
pi = 3.1415926535897931Una sentencia es una unidad de código que el intérprete de Python puede ejecutar.
Los operadores son símbolos especiales que representan cálculos: + - / *
>>> 2 + 2
4
>>> 13 - 4 * 2
5Una expresión es una combinación de valores, variables y operadores.
Cuando en una expresión aparece más de un operador, el orden de evaluación depende de las reglas de precedencia - PEMDSR - PEMDAS
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
1El operador + concatena cadenas.
>>> primero = '100'
>>> segundo = '150'
>>> print(primero + segundo)
100150Python proporciona una función interna llamada input que recibe la entrada desde el teclado.
>>> nombre = input('¿Como te llamas?')
¿Como te llamas?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 #
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)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 yExisten tres operadores lógicos: and (y), or (o), y not (no).
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')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')Un condicional puede también estar anidado dentro de otro.
Existen estructuras de ejecución condicional dentro de Python para manejar errores esperados e inesperados, llamadas try / except.
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) > 2Una función es una secuencia de sentencias que realizan una operación y que reciben un nombre
Python proporciona un número importante de funciones internas, que pueden ser usadas sin necesidad de tener que definirlas previamente.
Ejemplo: max(), min(), len()
Python también proporciona funciones internas que convierten valores de un tipo a otro.
Ejemplo: int(), float(), str()
Python tiene un módulo matemático (math), que proporciona la mayoría de las funciones matemáticas habituales (seno, conseno, logaritmo, tangente...).
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
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.
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.
Dentro de las funciones, los argumentos son asignados a variables llamadas parámetros.
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).
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.
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
Es útil para repetir tareas idénticas o similares.
n=5
while n > 0:
print(n)
n=n-1
print('¡Despegue!')Se puede crear un ciclo infinito y usar la sentencia break para salir de él cuando lo desee.
La sentencia continue para pasar a la siguiente iteración sin terminar la ejecución del cuerpo del bucle.
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
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
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]
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]
letra = 'manzana'
indice = 0
while indice < len(fruta):
letra = fruta[indice]
print(letra)
indice = indice + 1m a n z a n a
[0]
[1]
[2]
[3]
[4]
[5]
[6]
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.
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]
Dado que fruta es una cadena, ¿qué devuelve fruta[:]?
>>> saludo = 'Hola, mundo!'
>>> saludo[0] = 'J'
TypeError: 'str' object does not support item assignmentEjercicio: 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.
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
Los operadores de comparación (==) funcionan en 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.
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”.
Ejercicio: De la siguiente cadena se desea obtener unp.edu.ni:
From pedro.reyes@unp.edu.ni Sat Jan 5 09:14:16 2023
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?
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.
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
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:
Esto es sencillo de hacer leyendo el nombre de archivo del usuario utilizando input
Esto es sencillo de hacer leyendo el nombre de archivo del usuario utilizando input
Para escribir en un archivo, tienes que abrirlo en modo “w” (de write, escritura)
Para escribir en un archivo, tienes que abrirlo en modo “w” (de write, escritura)
By Wilfredo Meneses