Variables

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

mensaje = 'Y ahora algo completamente diferente'

n = 17

pi = 3.1415926535897931

verdadero = True

El tipo de una variable es el tipo del valor al que se refiere y se asigna de forma dinámica al darle valor a la variable en su declaración.

type(mensaje)

type(n)

type(pi)

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 (veremos por qué más adelante). El carácter guión bajo (_) puede utilizarse en un nombre. A menudo se utiliza en nombres con múltiples palabras, como en

mi_nombre o velocidad_de_golondrina_sin_carga.

El intérprete usa palabras clave para reconocer la estructura del programa, y esas palabras no pueden ser utilizadas como nombres de variables. Python reserva 33 palabras claves para su propio uso:

and

as

assert

break

class

continue

def

del

elif

else

except

False

finally

for

from

global

if

import

in

is

lambda

None

nonlocal

not

or

pass

raise

return

True

try

while

with

yield

Sentencias

Una sentencia es una unidad de código que el intérprete de Python puede ejecutar. Hemos visto hasta ahora dos tipos de sentencia: print y las asignaciones. Cuando escribes una sentencia en modo interactivo, el intérprete la ejecuta y muestra el resultado, si es que lo hay. Un script normalmente contiene una secuencia de sentencias. Si hay más de una sentencia, los resultados aparecen de uno en uno según se van ejecutando las sentencias.

Por ejemplo, el script

print(1)

x = 2

print(x)

Produce la salida

1

2

Operadores y operandos

Los operadores son símbolos especiales que representan cálculos, como la suma o la multiplicación. Los valores a los cuales se aplican esos operadores reciben el nombre de operandos. Los operadores +, -, *, /, y ** realizan sumas, restas, multiplicaciones, divisiones y exponenciación (elevar un número a una potencia), como se muestra en los ejemplos siguientes:

20+32

hour-1

hour*60+minute

minute/60

5**2

Divisón entera en Python3

63//60

1

Módulo obtiene el resto de una división

63%60

3

El operador módulo resulta ser sorprendentemente útil. Por ejemplo, puedes comprobar si un número es divisible por otro si x % y es cero, entonces x es divisible por y.

O para saber si un númeor es par o impar

if x%2 == 0 :

print('x es par')

else :

print('x es impar')

Operaciones con cadenas

El operador + funciona con las cadenas, pero no realiza una suma en el sentido matemático. En vez de eso, realiza una concatenación, que quiere decir que une ambas cadenas, enlazando el final de la primera con el principio de la segunda. Por ejemplo:

primero = 10

segundo = 15

¿print(primero+segundo)

25

primero = '100'

segundo = '150'

print(primero + segundo)

100150

Petición de información al usuario

A veces necesitaremos que sea el usuario quien nos proporcione el valor para una variable, a través del teclado. Python proporciona una función interna llamada input que recibe la entrada desde el teclado. Cuando se llama a esa función, el programa se detiene y espera a que el usuario escriba algo. Cuando el usuario pulsa Retorno o Intro, el programa continúa y input devuelve como una cadena aquello que el usuario escribió.

entrada = input()

Cualquier cosa

print(entrada)

Cualquier cosa

Comentarios

# calcula el porcentaje de hora transcurrido

porcentaje = (minuto * 100) / 60

Ejecución condicional

Expresiones booleanas

Una expresión booleana es aquella que puede ser verdadera (True) o falsa (False) y se usan para las expresiones condicionales.

>>> 5 == 5

True

>>> 5 == 6

False

Operadores de comparación

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

Operadores lógicos

Existen tres operadores lógicos: and (y), or (o), y not (no). El significado semántico de estas operaciones es similar a su significado en inglés. Por ejemplo, x > 0 and x < 10

es verdadero sólo cuando x es mayor que 0 y menor que 10. Otro ejemplo n%2 == 0 or n%3 == 0 es verdadero si cualquiera de las condiciones es verdadera, es decir, si el número es divisible por 2 o por 3.

Finalmente, el operador not niega una expresión booleana, de modo que not (x > y) es verdadero si x > y es falso; es decir, si x es menor o igual que y.

Ejecución condicional completa

if x < y:

print('x es menor que y')

elif x > y:

print('x es mayor que y')

else:

print('x e y son iguales')

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”. La idea de try y except es que si se sabe que cierta secuencia de instrucciones puede generar un problema, sea posible añadir ciertas sentencias para que sean ejecutadas en caso de error. Estas sentencias extras (el bloque except) serán ignoradas si no se produce ningún error.

Supongamos el siguiente código

ent = input('Introduzca la Temperatura Fahrenheit: ')

fahr = float(ent)

cel = (fahr - 32.0) * 5.0 / 9.0

print(cel)

A continuación dos posibles ejecusiones:

Introduzca la Temperatura Fahrenheit: 72

22.2222222222

Introduzca la Temperatura Fahrenheit: fred

Traceback (most recent call last):

File "fahren.py", line 2, in

fahr = float(ent)

ValueError: invalid literal for float(): fred

Esto puede resolverse controlando el error de la siguiente manera:

ent = input('Introduzca la Temperatura Fahrenheit:')

try:

fahr = float(ent)

cel = (fahr - 32.0) * 5.0 / 9.0

print(cel)

except:

print('Por favor, introduzca un número')

La sentencia while

Una forma de iteración en Python es la sentencia while. He aquí un programa sencillo que cuenta hacia atrás desde cinco y luego dice “¡Despegue!”.

n = 5

while n > 0:

print(n)

n = n - 1

print('¡Despegue!')

Casi se puede leer la sentencia while como si estuviera escrita en inglés. Significa, “Mientras n sea mayor que 0, muestra el valor de n y luego reduce el valor de n en 1 unidad. Cuando llegues a 0, sal de la sentencia while y muestra la palabra ¡Despegue!”

Bucles infinitos y break

while True:

linea = input('> ')

if linea == 'fin':

break

print(linea)

print('¡Terminado!')

Finalizar iteraciones con continue

Algunas veces, estando dentro de un bucle se necesita terminar con la iteración actual y saltar a la siguiente de forma inmediata. En ese caso se puede utilizar la sentencia continue para pasar a la siguiente iteración sin terminar la ejecución del cuerpo del bucle para la actual.

while True:

linea = input('> ')

if linea[0] == '#' :

continue

if linea == 'fin':

break

print(linea)

print('¡Terminado!')

Bucles definidos usando for

A veces se desea repetir un bucle a través de un conjunto de cosas, como una lista de palabras, las líneas de un archivo, o una lista de números. Cuando se tiene una lista de cosas para recorrer, se puede construir un bucle definido usando una sentencia for.

amigos = ['Joseph', 'Glenn', 'Sally']

for amigo in amigos:

print('Feliz año nuevo:', amigo)

print('¡Terminado!')

Funciones

En el contexto de la programación, una función es una secuencia de sentencias que realizan una operación y que reciben un nombre. Cuando se define una función, se especifica el nombre y la secuencia de sentencias. Más adelante, se puede “llamar” a la función por ese nombre.

¿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.

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.

Las funciones pueden tener argumentos o parámetros que representan valores que van a ser usados en la lógica de la función.

Una vez definida una función, se puede reutilizar una y otra vez a lo largo de todo el programa. He aquí un ejemplo de la función que calcula el promedio de dos valores numéricos (parámetros de la función):

def promedio(a,b):

res = (a+b)/2

return res

print(promedio(8,10))

Las reglas para los nombres de las funciones son los mismos que para las variables: se pueden usar letras, números y algunos signos de puntuación, pero el primer carácter no puede ser un número. No

se puede usar una palabra clave como nombre de una función, y se debería evitar también tener una variable y una función con el mismo nombre. Los paréntesis vacíos después del nombre indican que esta función no toma ningún argumento o parámetro.

El número de argumentos y la posición de los mismos es importante.

Los argumentos de la función también pueden tener valores predeterminados. Estos también son conocidos como argumentos opcionales.

def fav_lenguaje(lenguaje="Python"):

print(f"Mi lenguaje favorito de programación es {lenguaje}!")

fav_lenguaje() # Resultado: Mi lenguaje favorito de programación es python!

fav_lenguaje("javascript") # Resultado: Mi lenguaje favorito de programación es javascript!

Funciones internas

>>> len('Hola, mundo')

11

>>> int('32') >> Convierte un tipo de dato string a int

32

>>> str(32) >> Convierte un tipo de dato int a String

'32'

La función de conversión puede generar errores

>>> int('Hola')

ValueError: invalid literal for int() with base 10: 'Hola'

Módulos de funciones

Python tiene diferentes módulos que encapsulan funciones.

Por ejemplo tiene un módulo matemático (math), que proporciona la mayoría de las funciones matemáticas habituales. Antes de que podamos utilizar el módulo, deberemos importarlo:

import math

Esta sentencia crea un objeto módulo llamado math.

El objeto módulo contiene las funciones y variables definidas en el módulo. Para acceder a una de esas funciones, es necesario especificar el nombre del módulo y el nombre de la función, separados por un punto (también conocido en inglés como períod). Este formato recibe el nombre de notación punto.

relacion = int_senal / int_ruido

decibelios = 10 * math.log10(relacion)

El módulo random proporciona funciones que generan números pseudoaleatorios (a los que simplemente llamaremos “aleatorios” de ahora en adelante). La función random devuelve un número flotante aleatorio entre 0.0 y 1.0 (incluyendo 0.0, pero no 1.0). Cada vez que se llama a random, se obtiene el número siguiente de una larga serie. Para ver un ejemplo, ejecuta este bucle:

import random

for i in range(10):

x = random.random()

print(x)

Este programa produce la siguiente lista de 10 números aleatorios entre 0.0 y hasta (pero no incluyendo) 1.0.

0.11132867921152356

0.5950949227890241

0.04820265884996877

0.841003109276478

0.997914947094958

0.04842330803368111

0.7416295948208405

0.510535245390327

0.27447040171978143

0.028511805472785867

Cadenas

Una cadena es una secuencia de caracteres. Puedes acceder a los caracteres de uno en uno con el operador corchete:

>>> fruta = 'banana'

>>> letra = fruta[1]

La segunda sentencia extrae el carácter en la posición del indice 1 de la variable fruta y la asigna a la variable letra. La expresión en los corchetes es llamada índice. El índice indica qué carácter de la secuencia quieres, siendo 0 el indice del primer caracter de la cadena.

Función para el tamaño de una cadena

>>> len(fruta)

6

Recorriendo una cadena mediante un bucle

Muchos de los cálculos requieren procesar una cadena carácter por carácter.

Versión 1

indice = 0

while indice < len(fruta):

letra = fruta[indice]

print(letra)

indice = indice + 1

Versión 2

for caracter in fruta:

print(caracter)

Segmentos de cadenas

s = 'Monty Python'

print(s[0:5])

Monty

fruta = 'banana'

fruta[:3]

'ban'

fruta[3:]

'ana'

El 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:

>>> 'a' in 'banana'

True

>>> 'semilla' in 'banana'

False

Operadores con cadenas

if palabra == 'banana':

print('Muy bien, bananas.')

Otras operaciones de comparación son útiles para poner palabras en orden alfabético:

if palabra < 'banana':

print('Tu palabra, ' + palabra + ', está antes de banana.')

elif palabra > 'banana':

print('Tu palabra, ' + palabra + ', está después de banana.')

else:

print('Muy bien, bananas.')

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.

>>> palabra = 'banana'

>>> nueva_palabra = palabra.upper()

>>> print(nueva_palabra)

BANANA

Por ejemplo, existe un método de cadena llamado find que busca la posición de una cadena dentro de otra

>>> palabra = 'banana'

>>> indice = palabra.find('a')

>>> print(indice)

1

Una tarea común es eliminar los espacios en blanco (espacios, tabs, o nuevas líneas) en el inicio y el final de una cadena usando el método strip

>>> linea = ' Aquí vamos

>>> linea.strip()

'Aquí vamos'

Algunos métodos como startswith devuelven valores booleanos

>>> linea = 'Que tengas un buen día'

>>> linea.startswith('Que')

True

>>> linea.startswith('q')

False

Listas

Así como una cadena, una lista es una secuencia de valores. En una cadena, los valores son caracteres; en una lista, pueden ser cualquier tipo. Los valores en una lista son llamados elementos o a veces ítems.

Definición de una lista

valores = [10, 20, 30, 40]

animales = ['rana', 'carnero', 'alondra']

Los elementos de una lista no tienen que ser del mismo tipo. La siguiente lista contiene una cadena, un flotante, un entero, y otra lista:

['spam', 2.0, 5, [10, 20]]

La sintaxis para accesar elementos de una lista es la misma que para accesar los caracteres de una cadena: el operador corchete. La expresión dentro de los corchetes especifíca el índice. Recordemos que los índices empiezan en 0.

El operador in funciona también en listas.

quesos = ['Cheddar', 'Edam', 'Gouda']

'Edam' in quesos

True

'Brie' in quesos

False

Recorriendo una lista

for queso in quesos:

print(queso)

Algunos métodos y funciones

t = ['d', 'c', 'e', 'b', 'a']

t.sort()

print(t)

['a', 'b', 'c', 'd', 'e']

t = ['a', 'b', 'c']

x = t.pop(1)

print(t)

['a', 'c']

print(x)

b

t = ['a', 'b', 'c']

t.remove('b')

print(t)

['a', 'c']

t = ['a', 'b', 'c', 'd', 'e', 'f']

del t[1:5]

print(t)

['a', 'f']

Hay un cierto número funciones internas que pueden ser utilizadas en las listas que te permiten mirar rápidamente a través de una lista sin escribir tus propios bucles:

>>> nums = [3, 41, 12, 9, 74, 15]

>>> print(len(nums))

6

>>> print(max(nums))

74

>>> print(min(nums))

3

>>> print(sum(nums))

154

>>> print(sum(nums)/len(nums))

25

Para convertir una cadena en una lista de caracteres, puedes usar list:

>>> s = 'spam'

>>> t = list(s)

>>> print(t)

['s', 'p', 'a', 'm']

Debido a que list es el nombre de una función interna, debes evitar usarla como un nombre de variable. Yo trato de evitar también la letra “l” porque se parece mucho al número “1”. Así que por eso utilizo “t”. La función list divide una cadena en letras individuales. Si quieres dividir una cadena en palabras, puedes utilizar el método split:

>>> s = 'suspirando por los fiordos'

>>> t = s.split()

>>> print(t)

['suspirando', 'por', 'los', 'fiordos']

>>> print(t[2])

los

Otros ejemplos útiles

>>> s = 'nombre,apellido,dirección,telefono'

>>> delimiter = ','

>>> datos = s.split(delimiter)

>>> for item in datos:

print(item)

nombre

apellido

dirección

telefono

>>> t = ['suspirando', 'por', 'los', 'fiordos']

>>> delimiter = ' '

>>> delimiter.join(t)

'suspirando por los fiordos'

Diccionarios

Un diccionario es como una lista, pero más general. En una lista, los índices de posiciones tienen que ser enteros; en un diccionario, los índices pueden ser (casi) cualquier tipo.

Puedes pensar en un diccionario como una asociación entre un conjunto de índices (que son llamados claves) y un conjunto de valores. Cada clave apunta a un valor.

La asociación de una clave y un valor es llamada par clave-valor o a veces elemento. Como ejemplo, vamos a construir un diccionario que asocia palabras de Inglés a Español, así que todas las claves y los valores son cadenas.

Declaración de un diccionario

eng2sp = dict()

eng2sp = {}

eng2sp = {'one': 'uno', 'two': 'dos'}

Se utiliza la clave para encontrar el valor correspondientes:

>>> print(eng2sp['two'])

'dos'

La función len funciona en diccionarios; ésta regresa el número de pares clave-valor:

>>> len(eng2sp)

3

El operador in funciona en diccionarios; éste te dice si algo aparece como una clave en el diccionario.

>>> 'one' in eng2sp

True

>>> 'uno' in eng2sp

False

Funciones para obtener todas las claves y todos los valores

>>> allvals = list(eng2sp.values())

>>> allkeys = list(eng2sp.keys())

Recorrido de diccionarios

contadores = { 'chuck' : 1 , 'annie' : 42, 'jan': 100}

for clave in contadores:

print(clave, contadores[clave])

Aquí está lo que muestra de salida:

jan 100

chuck 1

annie 42