viernes, 31 de enero de 2014

Entrada Estándar: input()


La función input() permite a los usuarios introducir datos de distintos tipos desde la entrada estándar (normalmente se corresponde con la entrada de un teclado). 

Introducir datos de distinto tipo


edad = int(input('Teclear edad: '))  # entrada de entero
peso = float(input('Teclear peso: '))  # entrada de flotante
nombre = input('Teclear nombre: ')  # entrada de cadena
print(nombre, edad, 'años', peso, 'kg')  # muestra datos

Introducir datos con captura de errores (excepciones)


try:  # bloque de código a comprobar
    articulos = int(input('Artículos:'))  # entrada de un número 
    precio = int(input('Precio:'))  # entrada de un número
    print('Pagar: ' + str(articulos*precio) + '€') # muestra resultado

except:  # bloque para captura de error
    print('error, deben ser números')  # muestra mensaje

Introducir datos con captura de errores en bucle


tramos = 0
total = 0
while True:
    try:
        distancia = int(input('Distancia: '))
        if distancia == 0:
            break
        else:
            tramos += 1
            total += distancia
            print('Los {} tramos miden {} km.'.format(tramos,total))
    except:
        print('Debes teclear un número entero')

En el siguiente ejemplo si se produce un error no se detendrá el proceso. Volverá a pedirse que se introduzca un dato numérico gracias al bucle.

Introducir fechas y horas con captura de errores


Para validar la entrada de fechas y horas se utiliza la función strptime() del módulo datetime que convierte la entrada introducida a un tipo de datos llamado datetime. En caso de que no pueda convertirla porque no se adecue a una fecha/hora correcta producirá una excepción.

import datetime

while True:
    try:
        fecha = input("Introducir Fecha dd-mm-aaaa: ")
        fecha = datetime.datetime.strptime(fecha, "%d-%m-%Y")
        break
 
    except:
        print ("Fecha incorrecta\n")

print(fecha)


Ir al índice del tutorial de Python

Cadenas, listas, tuplas, diccionarios y conjuntos (set)


Las cadenas, listas y tuplas son distintos tipos de secuencias. Una secuencia es un tipo de objeto que almacena datos y que permite el acceso a una parte determinada de su información utilizando índices. 

Las listas, tuplas, diccionarios y conjuntos (set) son estructuras que permiten trabajar con colecciones de datos. El primer elemento de una lista o de una tupla ocupa la posición 0.

Listas


Una lista es una estructura de datos que contiene una colección o secuencia de datos. Los datos o elementos de una lista deben ir separados con una coma y todo el conjunto entre corchetes. Se dice que una lista es una estructura mutable porque además de permitir el acceso a los elementos, pueden suprimirse o agregarse nuevos.

ListaEstaciones = [“Invierno”, “Primavera”, “Verano”, “Otoño”]  # Declara lista

Para definir una lista vacía, a la que con posterioridad se podría agregar elementos, existen dos posibilidades:

lista = []
lista = list()

Tuplas


Una tupla permite tener agrupados un conjunto inmutable de elementos, es decir, en una tupla no es posible agregar ni eliminar elementos. Las tuplas se declaran separando los elementos por comas y éstos, opcionalmente, pueden ir entre paréntesis. Se recomienda el uso de paréntesis para evitar ambigüedades del tipo: print(9, 8, 7) y print((9, 8, 7)).

TuplaDiasSemana = (“LU”, “MA”, “MI”, “JU”, “VI”, “SA”, “DO”)  # Declara tupla

Operaciones con cadenas y listas


cadena1 = 'tengo una yama que Yama se llama'  # declara variable
lista1 = ['pera', 'manzana', 'naranja', 'uva']  # declara lista
longitud = len(cadena1)  # 32, devuelve longitud de la cadena
elem = len(lista1)  # 4, devuelve nº elementos de la lista 
cuenta = cadena1.count('yama')  # 1, cuenta apariciones de 'yama'
print(cadena1.find('yama'))  # 10, devuelve posición de búsqueda 
cadena2 = cadena1.join('***')  # inserta cadena1 entre caracteres  
lista1 = cadena1.split(' ')  # divide cadena por separador → lista
tupla1 = cadena1.partition(' ')  # divide cadena por separador → tupla 
cadena2 = cadena1.replace('yama','cabra',1) # busca/sustituye términos 
numero = 3.14  # asigna número con decimales
cadena3 = str(numero)  # convierte número a cadena
if cadena1.startswith("tengo"):  # evalúa si comienza por “tengo”
if cadena1.endswith("llama"):  # evalúa si termina por “llama”
if cadena1.find("llama") != -1:  # evalúa si contiene “llama”
cadena4 = 'Python'  # asigna una cadena a una variable
print(cadena4[0:4])  # muestra desde la posición 0 a 4: "Pyth"
print(cadena4[1])  # muestra la posición 1: "y"
print(cadena4[:3] + '-' + cadena4[3:])  # muestra "Pyt-hon"
print(cadena4[:-3])  # muestra todo menos las tres últimas: "Pyt"

# declara variable con cadena alfanumérica
cadena5 = "  abc;123  "

# suprime caracteres en blanco (y \t\n\r) por la derecha
print(cadena5.rstrip())  # "  abc;123"

# suprime caracteres en blanco (y \t\n\r) por la izquierda
print(cadena5.lstrip())  # "abc;123  "

# suprime caracteres en blanco (y \t\n\r) por derecha e izquierda 
print(cadena5.strip())  # "abc;123"

# suprime caracteres del argumento por la derecha e izquierda
print(cadena5.strip("123456790; "))  # "abc"

cadena6 = "Mar"   # declara una variable
print(cadena5.upper())   # convierte a mayúsculas: "MAR"
print(cadena5.lower())   # convierte a minúsculas: "mar" 

 

Operaciones con listas y tuplas


lista1 = ['uno', 2, True]  # declara una lista heterogénea
lista2 = [1, 2, 3, 4, 5]  # declara lista numérica (homogénea)
lista3 = ['nombre', ['ap1', 'ap2']]  # declara lista dentro de otra
lista4 = [54,45,44,22,0,2,99]  # declara una lista numérica
print(lista1)  # ['uno', 2, True], muestra toda la lista
print(lista1[0])  # uno, muestra el primer elemento de la lista
print(lista2[-1])  # 5, muestra el último elemento de la lista
print(lista3[1][0])  # calle, primer elemento de la lista anidada
print(lista2[0:3:1])  # [1,2,3], responde al patrón inicio:fin:paso
print(lista2[::-1])  # devuelve la lista ordenada al revés
lista1[2] = False  # cambia el valor de un elemento de la lista
lista2[-2] = lista2[-2] + 1  # 4+1 → 5 – cambia valor de elemento
lista2.pop(0)  # borra elemento indicado o último si no indica
lista1.remove('uno')  # borra el primer elemento que coincida
del lista2[1]  # borra el segundo elemento (por índice)  
lista2 = lista2 + [6]  # añade elemento al final de la lista
lista2.append(7)  # añade un elemento al final con append()
lista2.extend([8, 9])  # extiende lista con otra por el final
lista1.insert(1, 'dos')  # inserta nuevo elemento en posición
del lista2[0:3]  # borra los elementos desde:hasta
lista2[:] = []  # borra todos los elementos de la lista 
print(lista1.count(2))  # cuenta el nº de veces que aparece 2
print(lista1.index("dos"))  # busca posición que ocupa elemento
lista3.sort()  # ordena la lista
lista3.sort(reverse=True)  # ordena la lista en orden inverso
lista5 = sorted(lista4)  # ordena lista destino 
tupla1 = (1, 2, 3)  # declara tupla (se usan paréntesis)...
tupla2 = 1, 2, 3  # ...aunque pueden declararse sin paréntesis
tupla3 = (100,)  # con un elemento hay terminar con “,”
tupla4 = tupla1, 4, 5, 6  # anida tuplas
tupla5 = ()  # declara una tupla vacía
tupla6 = tuple([1, 2, 3, 4, 5])  # Convierte una lista en una tupla
tupla2[0:3]  # (1, 2, 3), accede a los valores desde:hasta

Diccionarios o matrices asociativas


Los diccionarios son objetos que contienen una lista de parejas de elementos. De cada pareja un elemento es la clave, que no puede repetirse, y, el otro, un valor asociado. La clave que se utiliza para acceder al valor tiene que ser un dato inmutable como una cadena, mientras que el valor puede ser un número, una cadena, un valor lógico (True/False), una lista o una tupla.

Los pares clave-valor están separados por dos puntos, las parejas por comas y todo el conjunto se encierra entre llaves.

Ejemplos:

capitales = {'Chile':'Santiago', 'España':'Madrid', 'Francia':'París'}

Para definir un diccionario vacío hay dos opciones:

capitales = {}
capitales = dict()


En el siguiente ejemplo se realizan algunas operaciones típicas con un diccionario:

# declara diccionario
capitales = {'Chile':'Santiago',
              'España':'Madrid',
              'Francia':'París'}
              
print('La capital de Chile es', capitales['Chile'])  # 'Santiago'
del capitales['Francia']  # borra el par Francia:París
print('\nHay {0} países\n'.format(len(capitales)))  # 'Hay 2 países'
for pais, capital in capitales.items():  # recorre diccionario
    print('Capital de {0}: {1}'.format(pais, capital))  # muestra par

capitales['Portugal'] = 'Lisboa'  # agrega par Portugal:Lisboa
if 'Portugal' in capitales:  # comprueba si existe clave
    print('\nCapital Portugal:', capitales['Portugal']) # 'Lisboa'

Operaciones con diccionarios


dic1 = {'Lorca':'Escritor', 'Goya':'Pintor'} # declara diccionario 
print(dic1) # {'Goya': 'Pintor', 'Lorca': 'Escritor'}
dic2 = dict((('mesa',5), ('silla',10))) # declara a partir de tupla
dic3 = dict(ALM=5, CAD=10) # declara a partir de cadenas simples 
dic4 = dict([(z, z**2) for z in (1, 2, 3)]) # declara a partir patrón
print(dic4)  # muestra {1: 1, 2: 4, 3: 9}
print(dic1['Lorca'])  # escritor, acceso a un valor por clave
print(dic1.get('Gala', 'no existe'))  # acceso a un valor por clave
if 'Lorca' in dic1: print('está')  # comprueba si existe una clave
print(dic1.items())  # obtiene una lista de tuplas clave:valor
print(dic1.keys())  # obtiene una lista de las claves
print(dic1.values())  # obtiene una lista de los valores
dic1['Lorca'] = 'Poeta'  # añade un nuevo par clave:valor
dic1['Amenabar'] = 'Cineasta'  # añade un nuevo par clave:valor
dic1.update({'Carreras' : 'Tenor'})  # añadir con update()
del dic1['Amenábar']  # borra un par clave:valor 
print(dic1.pop('Amenabar', 'no está'))  # borra par clave:valor

Recorrer secuencias y diccionarios con for...in


artistas = {'Lorca':'Escritor', 'Goya':'Pintor'} # diccionario
paises = ['Chile','España','Francia','Portugal'] # declara lista
capitales = ['Santiago','Madrid','París','Lisboa']  # declara lista
for c, v in artistas.items(): print(c,':',v)  # recorre diccionario
for i, c in enumerate(paises): print(i,':',c)  # recorre lista 
for p, c in zip(paises, capitales): print(c,' ',p) # recorre listas
for p in reversed(paises): print(p,)  # recorre en orden inverso
for c in sorted(paises): print(c,)  # recorre secuencia ordenada

Importante: A partir de Python 3.6 la implementación de los diccionarios ha cambiado, manteniéndose en todo momento el orden en que fueron agregados los elementos a un diccionario cuando son recorridos o consultados.

Relacionado:

Recorrer rangos con for... in range()


for num in range(7): print(num)  # recorre de 0 a 6
for num in range(1,8): print(num)  # recorre de 1 a 7
for num in range(10,50,5): print(num) # de 10 a 45 de 5 en 5
for num in range(0,-10,-1): print(num)  # de 0 a -9 de -1 en -1

lista = ["Chorizo","Jamón","Morcilla","Salchichón"]  # lista
for elemento in range(len(lista)):  # recorre elementos de lista
    print (elemento, lista[elemento])  # muestra posición y elemento

Operadores para secuencias: in, not in, is, is not


cadena = 'Python'  # asigna cadena a variable
lista = [1, 2, 3, 4, 5]  # declara lista
if 'y' in cadena: print('“y” está en “Python”')  # contiene
if 6 not in lista: print('6 no está en la lista') # no contiene
if 'abcabc' is 'abc' * 2: print('Son iguales')  # son iguales

Conjuntos: set


Un conjunto es una lista de elementos donde ninguno de ellos está repetido. A partir de una lista, en la que pueden haber elementos repetidos, con set es posible crear otra lista con todos los elementos pero sin repetir ninguno. Además, si tenemos varias listas podemos realizar operaciones de conjuntos de unión, diferencia, intersección y diferencia simétrica:

- diferencia, | unión, & intersección y ^ diferencia simétrica

Operaciones con conjuntos


conjunto = set()  # Define un conjunto vacío
lista = ['vino', 'cerveza', 'agua', 'vino']  # define lista
bebidas = set(lista)  # define conjunto a partir de una lista
print('vino' in bebidas)  # True, 'vino' está en el conjunto
print('anis' in bebidas)  # False, 'anis' no está en el conjunto
print(bebidas)  # imprime {'agua', 'cerveza', 'vino'}
bebidas2 = bebidas.copy()  # crea nuevo conjunto a partir de copia
print(bebidas2)  # imprime {'agua', 'cerveza', 'vino'}
bebidas2.add('anis')  # añade un nuevo elemento 
print(bebidas2.issuperset(bebidas)) # True, bebidas es subconjunto
bebidas.remove('agua')  # borra elemento
print(bebidas & bebidas2)  # imprime elementos comunes
tapas = ['croquetas', 'solomillo', 'croquetas']  # define lista
conjunto = set(tapas)  # crea conjunto (sólo una de croquetas)
if 'croquetas' in conjunto:  # evalúa si croquetas está
conjunto1 = set('Python')  # define conjunto: P,y,t,h,o,n 
conjunto2 = set('Pitonisa')  # define conjunto: P,i,t,o,n,s,a
print(conjunto2 - conjunto1)  # aplica diferencia: s, i, a
print(conjunto1 | conjunto2)  # aplica unión: P,y,t,h,o,n,i,s,a 
print(conjunto1 & conjunto2)  # intersección: P,t,o,n
print(conjunto1 ^ conjunto2)  # diferencia simétrica: y,h,i,s,a


Relacionado:

Ir al índice del tutorial de Python

Control del flujo


Control del flujo: if


La sentencia if se utiliza para controlar el flujo en la ejecución de un programa. Básicamente, si se cumple una condición puede hacerse que se ejecute un bloque de código, que estará sangrado, y si no se cumple o se dan otras posibilidades puede hacerse que se ejecuten otros bloques, igualmente sangrados. Para ello, se apoya en las clausulas elif que evalúa otras condiciones y en else, que en caso de no cumplirse ninguna de las condiciones anteriores ofrece la solución final. Varios ejemplos:

# Evaluar distintos valores numéricos

if edad <= 12:  # se evalúa la primera condición... 
    precio = 2  # y si edad es menor igual que 12, precio = 2
elif 13 <= edad <= 18:  # en caso contrario se evalúa...
    precio = 3  # si edad está entre 13 y 18, precio = 3
else:  # en cualquier otro caso...
    precio = 4  # precio = 4
print('A Pagar: ' + str(precio) + ' €')  # Muestra importe

# Evaluar en una sola línea

print('par' if edad % 2 == 0 else 'impar')  

# Evaluar si un valor está entre varios posibles

tecla = 'S'
if tecla in('s', 'S', 'y', 'Y'):
    print('Ha seleccionado: Sí')

# Evaluar variables booleanas

respuesta = True
if respuesta:  # Evalúa si respuesta es True
    print('Sí, es verdad')
else:
    print('Es falso')

# Evaluar variables por tipo de dato que contienen

var1 = "Python 3 para impacientes"
var2 = 3
var3 = 3.14
var4 = True
var5 = [1, 2, 3]
var6 = ('a', 'b', 'c')
var7 = {'a':1, 'b':2, 'c':3}

if type(var1) is str:
    print("'var1' es una cadena")

if type(var2) is int:
    print("'var2' es una número entero")

if type(var3) is float:
    print("'var3' es un número con decimales")

if type(var4) is bool:
    print("'var4' es un booleano")

if type(var4):
    print("'var4' es un booleano")

if type(var5) is list:
    print("'var5' es una lista")

if type(var6) is tuple:
    print("'var6' es una tupla")

if type(var7) is dict:
    print("'var7' es un diccionario")

# Evaluar si cadena, lista o diccionario están vacíos

var1 = ""
var2 = []
var3 = {}

if not var1:
    print("Cadena vacía")

if not var2:
    print("Lista sin elementos")
    
if not var3:
    print("Diccionario sin claves/valores")

# Evaluar si una variable no tiene ningún valor

var4 = None
if not var4:
    print("No tiene ningún valor")


Control del flujo con bucles: while


El bucle más elemental suele emplearse cuando un programa necesita repetir un número de veces un proceso hasta que una variable alcanza un valor o hasta que se cumple alguna condición predeterminada. Por ello, en muchos casos, los bucles incorporan variables que actúan como contadores que van cambiando su valor en cada ciclo o variables que representan un cambio de estado (p.e. verdadero y falso). 

La sentencia while incluye la condición que debe cumplirse para que se ejecute el bloque de código que contiene, aunque en cualquier momento podemos salir de un bucle con break o cancelar el ciclo actual y continuar con continue la ejecución del ciclo siguiente.

# Ejemplo de bucle con 'break'

contador = 0
limite = 5
while contador < 11:  # el bucle termina cuando contador=10 
    if contador == limite:  # o cuando alcance el valor limite 
        break
    else:
        contador += 1  # contador se incrementa en 1
        print(contador, limite)

# Ejemplo de bucle con 'continue' y 'break'

x=0
y=0
limite = 5
while True:
    y+=1
    if y!=limite:
        x+=y
    else:
        break
    if y!=3:
        continue
    print(x,y)

En un bucle infinito en el lugar de una condición se escribirá True o el valor 1. Las instrucciones del bucle se ejecutarán indefinidamente hasta que se fuerce su fin con un break.  

contador = 0
while True:
    contador += 1
    if contador == 10:  # cuando valor de contador sea 10...
        break  #  ...terminará la ejecución del bucle

Control del flujo con bucles: for...in


Otra forma de construir un bucle consiste en recorrer los elementos de un lista con la sentencia for...in. La construcción utiliza una variable que en cada ciclo toma el valor de un nuevo elemento de la lista de la clausula in. El bucle terminará cuando se alcance el último elemento de la lista o cuando se fuerce su fin con break

loteria = [12019, 23023, 90326, 40506, 89450, 21023, 13237]
for numero in loteria:
    if numero == 21023:
        print('Tiene el primer premio:', numero) 
        break

Con for también se puede usar la clausula in range que, en su uso más elemental, recorre una secuencia de valores (ver más opciones).

for num in range(10):
    print(num)  # recorre del 0 al 9


Relacionado: Bucles eficaces con Itertools

Ir al índice del tutorial de Python

jueves, 30 de enero de 2014

Operadores

Operadores aritméticos


Los operadores aritméticos en Python son:

+ Suma
- Resta
* Multiplicación
/ División
** Potenciación
// División, se obtiene parte entera del cociente
% División, se obtiene el resto


contador += 1  # es equivalente a contador = contador + 1
porc = 5  # asigna número entero a variable
total *= porc / 100  # es equivalente a total = total * porc/100
valor = -5  # el signo “-” también se usa para los nº negativos

Operadores binarios


Los operadores binarios emplean en sus operaciones la representación binaria de los datos. Los operadores binarios son:

& AND
| OR
^ XOR
~ NOT
<< Desplazamiento a la izquierda
>> Desplazamiento a la derecha


operacion1 = 1 | 2  # 01 + 10 = 11 → 3 en decimal
operacion2 = 1 & 2  # 01 * 10 = 00 → 0 en decimal
operacion3 = operacion1 ^ operacion2  # 11 * 11 = 11 → 3 

Operadores de comparación o relacionales


Los operadores de comparación en Python son:

< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
== Igual a
!= Distinto de

if y < x == z:  # si 'y' es menor que 'x' y 'x' es igual a 'z'
    print('Se han cumplido las dos condiciones')                   

Operadores lógicos


Los operadores lógicos permiten encadenar varias condiciones.

and Y
or O
not NO

# Anidando operadores con paréntesis “()”.
if (y and not x) or z:
    print('se ha cumplido alguna de las condiciones')



Relacionado: Operadores estándar como funciones

Ir al índice del tutorial de Python

Palabras reservadas. Variables. Cadenas.


Palabras reservadas de Python (35)


Las 35 palabras reservadas (keywords) de Python son:

and, as, assert, async, await, 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

No se pueden declarar variables, objetos, funciones y clases con estos términos. El siguiente código muestra la lista de palabras reservadas:

import keyword
print(keyword.kwlist)


Declarar variables


El signo igual “=” se utiliza para asignar números, booleanos, cadenas y expresiones a las variables de un programa. El tipo de la variable será el tipo del dato asignado: al declarar una variable no es necesario especificar el tipo de dato porque mientras se asigna el área de memoria necesaria el intérprete Python elige automáticamente el tipo más apropiado.

El nombre de una variable tiene que empezar por una letra del alfabeto o un guión bajo. En las siguientes posiciones podrán aparecer también números. Python distingue entre mayúsculas y minúsculas:

numero_entero = 5  # declara variable numérica
Numero_Entero = 5  # declara otra variable numérica distinta
x = y = z = 5  # asignación múltiple: x=5, y=5 y z=5
m, n = 5, 4 * 8  # asignación múltiple: m = 5 y n = 32
p1, p2 = (1, 2)  # asignación múltiple de tupla: p1 = 1 y p2 = 2 
cadena = 'Python3'  # declara cadena alfanumérica
cadena = 'Pytonisos\tdel\tmundo\n'  # incluye tab y salto de línea
cadena = '''cadenas
            que ocupan
            varias líneas'''  # declara cadena de varias líneas'
numero_float1 = 23.45  # números con decimales 
numero_float2 = 0.1e-3  # números con notación científica
numero_hexadecimal = 0x23  # número hexadecimal
booleano_verdad = True  # booleano: Verdadero
booleano_falso = False  # booleano: Falso
booleano_negar = not booleano_falso  # True, Verdadero
numero_complejo = 2 + 4j * 2  # (2+8j)

cadena1 = "4.5" # declara cadena1
cadena2 = "67" # declara cadena2
numero1 = float(cadena1) # Convierte cadena a flotante -> 4.5
numero2 = int(cadena2) # Convierte de cadena a entero -> 67

var_nula = None  # Declara variable con valor vacío o nulo 

Asignar múltiples valores de una lista


a, *b = [1, 2, 3, 4]  # a toma primer valor y b lista con los demás
print('a', a)  # 1
print('b', b)  # [2, 3, 4]

Resultado:
a: 1
b: [2, 3, 4]

Variable especial _


En Python un guion bajo único '_' es una variable especial que almacena el valor de la última expresión evaluada en la ejecución de código, que puede utilizarse con posterioridad para consultar su valor, en asignaciones, en cálculos o simplemente cuando se deseen ignorar los valores obtenidos evitando con ello el tener que declarar una variable específica.

En el siguiente ejemplo la variable _ almacena en cada ciclo los valores del 0 al 9 que con posterioridad se van sumando a la variable total:

total = 0
for _ in range(10):
    total += _
    print(total, end=' ')  # 0 1 3 6 10 15 21 28 36 45

En la siguiente asignación múltiple la variable _ se utiliza para asignar todos los valores excepto el primero y el último que son los que interesan para un cálculo posterior:

var1, *_, var2 = (10, 20, 30, 40, 50, 60, 70)
print(var1+var2)  # 80

En una lista de comprensión la variable _ se puede utilizar para cálculos:

                                        
lista = [12, 15, 21, 17, 28]
cuadrados = [_**2 for _ in lista]
print(cuadrados)  # [144, 225, 441, 289, 784]

En el entorno interactivo Python se puede usar también para acceder al valor obtenido como resultado de evaluar la última expresión:

>>> 5 + 6
11
>>> _
11


Cadenas crudas: raw


Cualquier cadena que deba interpretarse tal como se escribe es una cadena raw o cruda. En una cadena raw se omiten los caracteres especiales expresados con la barra invertida “\”. Las cadenas raw se escriben entrecomilladas y con el carácter “r” precediéndolas:

print('\\5', ' es igual que ', r'\5')

Operaciones básicas con variables


Varias variables que contienen cadenas pueden unirse (concatenarse) con el signo más “+”. También, dos o más cadenas pueden unirse expresándolas entrecomilladas, una a continuación de la otra. Es más, cualquier cadena puede replicarse un número de veces con el operador “*”.

Con la función type() podemos conocer el tipo de datos de una variable y con la sentencia del borramos una variable de memoria. Una vez borrada si intentamos acceder a su valor se producirá un error.


Los métodos upper() y lower() devuelven una cadena en mayúsculas y minúsculas, respectivamente.

En las expresiones matemáticas es posible establecer la prioridad en la resolución de las operaciones mediante el uso de paréntesis.

Ejemplos:

cadena1 = 'Python'  # Declara cadena con 'Python'
cadena2 = 'Lenguaje ' + cadena1.upper()  # Lenguaje PYTHON
cadena3 = 'Lenguaje ' 'Python'  # Lenguaje Python
cadena3 = cadena1.lower() * 3  # pythonpythonpython 
cadena4 = "Python para impacientes"
print(cadena4.title())  # Python Para Impacientes 

# Uso de paréntesis en expresiones
total1 = ((24 - 10 + 2.3) * 4.3 / 2.1) ** 2

print(total1)  # 1113.9700907
print(type(cadena1))  # type str=""
print(type(total1))  # type float=""
del cadena1  # Borra la variable de memoria
print(cadena1)  # Genera un error porque no existe

Las funciones ord() y chr()


La función ord() devuelve el ordinal entero del carácter indicado y justo lo contrario hace la función chr() que devuelve el carácter (Unicode) que representa al número indicado.

ord('$')  # 36
ord('@')  # 64
ord('A')  # 65
ord('ñ')  # 241
ord('Ұ')  # 1200
ord('€')  # 8364
ord('娼')  # 23100

chr(36)  # '$'
chr(64)  # '@'
chr(65)  # 'A'
chr(241)  # 'ñ'
chr(1200)  # 'Ұ'
chr(8364)  # '€'
chr(23100)  # '娼'

Métodos para evaluar cadenas


cadena.isalpha()

Devuelve verdadero (True) si todos los caracteres en la cadena son alfabéticos.

cadena.isalnum()

Devuelve verdadero (True) si todos los caracteres en la cadena son alfanuméricos.

cadena.isdecimal(), cadena.isdigit(), cadena.isnumeric()

Devuelve verdadero (True) si todos los caracteres en la cadena son números.

cadena.isspace()

Devuelve verdadero (True) si todos los caracteres son espacios en blanco.

cadena.islower(), cadena.isupper()

Devuelve verdadero (True) si todos los caracteres son minúsculas o mayúsculas, respectivamente.

cadena.istitle()

Devuelve verdadero (True) si el primer carácter de la cadena es mayúsculas y el resto minúsculas; o en el caso de que haya palabras separadas por espacios en blanco que cumplan la misma regla.
 
cadena1 = "Cuba"
cadena2 = "Costa Rica"
print(cadena1.isalpha())   # True
print(cadena1.isalnum())   # True
print(cadena1.isdecimal())   # False
print(cadena1.isspace())   # False
print(cadena2.istitle())   # True
if cadena1.isalpha():
    print("Todos los caracteres que contiene son alfabéticos")





Ir al índice del tutorial de Python

miércoles, 29 de enero de 2014

Escritura de programas. Recomendaciones básicas

La longitud máxima de línea recomendada es de 79 caracteres.

El punto y coma “;” se puede usar para separar varias sentencias en una misma línea, pero no se aconseja su uso:

edad = 15; print(edad)

El código Python se escribe en cada línea desde la primera posición excepto cuando es necesario dejar el código sangrado. El sangrado en Python es obligatorio, se hace con espacios en blanco o saltos de tabulación y sirve para agrupar bloques de líneas de código que tienen relación a distintos niveles. Se utiliza con estructuras de control (if-else, while, for), con funciones y clases. Además, permite que la lectura del código sea cómoda y agradable.

El sangrado se puede hacer con espacios y tabulaciones pero ambos tipos no se pueden mezclar.

Es posible sangrar con un único espacio en blanco pero lo normal es utilizar un número de espacios múltiplo de cuatro en cada nivel de sangrado (cuatro, ocho, doce espacios, etc.), o bien, distinto número de saltos de tabulación.

Por defecto, Geany inserta tabuladores aunque se puede cambiar este modo de sangrar en la opción “Preferencias” del menú “Editar”, apartado “Sección”, pestaña “Sangría”.

¿Cómo funciona el sangrado en Geany? Cuando se presiona [Enter] si la línea actual finaliza con dos puntos “:” la siguiente y sucesivas comenzarán sangradas. Para desangrar presionar la tecla de borrado [].

La barra invertida "\" al final de línea se emplea para dividir una línea muy larga en dos o más líneas.

Las expresiones entre paréntesis "()", llaves "{}" y corchetes "[]" separadas por comas "," se pueden escribir ocupando varias líneas.

 
# Sangrado con 4 espacios

edad=23
if edad>=18:
   print('Es mayor de edad')  
else:
   print('Es menor de edad')

# Cuando el bloque a sangrar sólo ocupa una línea ésta puede
# escribirse después de los dos puntos:   

if azul: print('Cielo')

# La barra invertida “\” permite escribir una línea de
# código demasiado extensa en varias líneas:

if condicion1 and condicion2 and condicion3 and \  
    condicion4 and condicion5

# Las expresiones entre paréntesis, llaves o corchetes pueden 
# ocupar varias líneas:

dias = ['lunes', 'martes', 'miércoles', 'jueves',
        'viernes', 'sábado', 'domingo'] 


Relacionado:

Ir al índice del tutorial de Python

Edición y ejecución de programas Python




Para escribir los programas se puede usar un editor como Geany que soporta codificación UTF-8, es liviano y multiplataforma.

Instalación y configuración del editor Geany


Si utiliza una distribución GNU/Linux como Ubuntu, para instalar el editor Geany utilizar el propio Centro de Software. Si tiene otra distribución o Windows puede descargar Geany desde la sección “Download” de la web de la aplicación www.geany.org y una vez descargada ejecutar el instalador.

Al iniciar Geany por primera vez se crea un documento vacío y sin nombre con la etiqueta “sin título”. Para realizar el primer programa escribir la siguiente línea:

print(“Python para impacientes”)

A continuación, guardamos el documento con el nombre “python-001.py” con la opción “Guardar” del menú “Archivo” o con la combinación de teclas [Ctrl+S].

Una vez almacenado el archivo, el editor Geany, por la extensión que hemos indicado en su nombre, identifica que el código introducido es Python y aplica colores a la sintaxis:

print(“Python para impacientes”)

En adelante, la característica de aplicar color a la sintaxis seguirá funcionando.

Antes de ejecutar el primer programa es necesario comprobar que el intérprete que  realizará dicha tarea es Python3 (y no una versión anterior). Para ello, accedemos a la opción “Establecer comandos de construcción” del menú “Construir” y verificamos que el comando del “Compilador” del apartado “Comandos de Python” y el comando “Ejecutar” del apartado “Ejecutar comandos” tengan los siguientes valores:



Comandos de Python:

Compilar: python3 -m py_compile "%f"

Ejecutar comandos:

Ejecutar: python3 "%f"


Si es preciso modificar y aceptar los cambios. Estos cambios serán permanentes, es decir, para nuevos programas se utilizará el intérprete de Python3.

Finalmente, ejecutamos el primer programa con la tecla [F5] o con la opción “Ejecutar” del menú “Construir”, o bien, con el botón “Ejecutar” de la barra de herramientas.

El resultado será mostrado en una ventana del emulador de Terminal:

Python para impacientes

Con la tecla [Enter] regresar al editor.

El siguiente proyecto “python-002.py” es algo más ambicioso porque incluye después de la línea de “for...” un bloque de líneas sangradas. Recomendamos teclear el código (no copiarlo) para comprobar como Geany sangra automáticamente cuando el guion lo requiere.

#!/usr/bin/python3
# -*- coding: utf-8 -*-
total=0
numeros=[0,1,2,3,4,5,6,7,8,9]
for numero in numeros: # recorre lista desde primer elemento a último
    total=total+numero
    print(numero, total)


Después de guardar el programa “python-002.py”, ejecutarlo con [F5]. El resultado será una lista de números desde el 0 al 9 y otra con la suma acumulada.

Por ahora no necesitamos saber más sobre Geany. En capítulos posteriores iremos aprendiendo más sobre su funcionamiento.

Convertir un programa en ejecutable


Incluir la ruta del intérprete Python en los programas:

En la primera línea de un programa debemos incluir la ruta donde está instalado el intérprete Python3 que deseamos invocar, como en el programa anterior. Ejemplos:

#!/usr/bin/python3
#!/usr/bin/env python3

La primera ruta es la habitual en un sistema GNU/Linux. La segunda ruta suele utilizarse en los programas que van a ejecutarse en distintos sistemas. Si tenemos instalado Python3 con el comando “which python3” podemos conocer su ruta.

Convertir en ejecutable y ejecutar un programa desde la línea de comandos:

$ chmod +x programa.py
$ ./programa.py

Añadir al PATH del sistema la ruta de un programa:

$ export PATH=$PATH:/home/carpetaprograma

Codificación (encoding)


Para que el intérprete Python3 reconozca además de los caracteres comunes de los distintos alfabetos, aquellos que son característicos de cada idioma (como sucede con la ñ en el castellano/español, con las vocales acentuadas o la diéresis) si la codificación del archivo fuente no es UTF-8 tendremos que insertar en el comienzo de nuestros programas la siguiente línea:

# -*- coding: utf-8 -*-

En los fuentes sin codificación UTF-8 que olvidemos indicarla y escribamos, por ejemplo, vocales acentuadas o la ñ, el intérprete Python no será capaz de reconocer estos caracteres y producirá un error.

Incluir # Comentarios en el código 


Además de los usos que hemos visto con anterioridad de la almohadilla “#”, este carácter se utiliza específicamente para comentar líneas de programa:

# Esto es un comentario

if caracter in 'Python':  # Si carácter está en 'Python'

Las cadenas de documentación o docstring son comentarios que pueden abarcar varias líneas, que comienzan y terminan con tres comillas (simples o dobles) y se sitúan al principio de los módulos, de las funciones y las clases para explicar la finalidad que tienen:

“””Comentario extenso
“””



Relacionado:


Ir al índice del tutorial de Python

Sesión interactiva Python



En una sesión interactiva con la consola predeterminada de Python3 podemos ejecutar una sentencia o un bloque de sentencias. Este modo de trabajo resulta de mucha utilidad para ejecutar programas pequeños, realizar cálculos y leer la documentación del lenguaje Python3.

(Existe una consola llamada IPython que incorpora algunas mejoras que pueden ser consideradas más adelante).


Iniciar una sesión interactiva


$ python3

Una sesión interactiva comienza con la siguiente información:

Python 3.2.3 (default, Sep 25 2013, 18:22:43) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Los signos >>> indican el lugar donde introducir las sentencias.


Finalizar una sesión interactiva


En Linux: 

Ctrl+D o exit()

En Windows: 

Ctrl+Z o exit()


Ejecutar sentencias

 

Ejecutar sentencias, una a una:


En una sesión interactiva después de escribir una sentencia la ejecutamos pulsando la tecla [Enter]:

print(“Hola Pythonisos”)[Enter]

Con la tecla [Flecha Arriba] podemos regresar a sentencias ejecutadas con anterioridad, modificaras y/o volverlas a ejecutar. 


Ejecutar bloques o secuencias de sentencias:


En ocasiones por exigencia de la sintaxis Python es necesario indentar o sangrar las líneas de código con la tecla [Tabulador], o bien, precediendo la sentencia con cuatro espacios en blanco. Para indicar el fin de un grupo de líneas sangradas pulsaremos [Enter] y para ejecutar el bloque pulsaremos nuevamente la tecla [Enter].

tengo_euros=10 [Enter]
if tengo_euros>7: [Enter]
[Tab ó cuatro espacios] print(“me voy al cine”) [Enter]
[Enter]

El sangrado del código es una característica de Python que hace posible una lectura cómoda de los programas.


Realizar cálculos


En el modo interactivo de Python podemos realizar cálculos matemáticos escribiendo expresiones del tipo:

2 * 5 
→ 10

(4 + 3 * 10) / 2 
→ 17.0

10 // 3 
→ 3  (al dividir devuelve la parte entera del cociente) 

5 ** 3 
→ 125 

El signo “=” se utiliza para asignar valores a variables. En adelante, las variables podrán incluirse en cualquier expresión que se escriba. Si una variable no está definida e intentamos emplearla el sistema producirá una excepción o error. 

Para acceder al valor de una variable, simplemente, hay que escribir su nombre:

precio_tapa = 3
numero_tapas = 5
a_pagar = precio_tapa * numero_tapas
a_pagar 

Resultado: 15

Para asignar un mismo valor a varias variables:

altura = ancho = 10


El resultado final de cualquier operación se asigna siempre a “_”:

Escribir dos operaciones seguidas.

altura * anchura
_ * 5

Es equivalente a:

10 * 10
100 * 5

Resultado: 500


Sesiones de Ayuda


Una sesión de ayuda da acceso a la documentación de Python.

Iniciar sesión de ayuda:


>>> help()

Una sesión de ayuda comienza con el siguiente texto:


help>

Finalizar sesión de ayuda:


help> quit

En una sesión de ayuda se puede consultar la documentación disponible de los módulos, funciones y sentencias de Python. Ejemplos:

Mostrar lista de módulos disponibles:


help> modules

Mostrar palabras reservadas del lenguaje Python:


help> keywords

Mostrar documentación del módulo os:


help> os

Muestra documentación de la sentencia if:


help> if

Cuando se muestra la documentación de un módulo, una función o una sentencia, podemos avanzar línea a línea con la tecla [Enter] o con [Flecha Abajo] y retroceder con [Flecha Arriba]. Para avanzar o retroceder, pantalla a pantalla, lo haremos con [Flecha Derecha] y [Flecha Izquierda], respectivamente. Cuando se alcance el final de la ayuda aparecerá el indicador (END). Para terminar la lectura, en cualquier momento, pulsar la tecla [q].

Ayuda directa:


En vez de iniciar una sesión de ayuda es posible pedir ayuda directa sobre una sentencia o un módulo concreto de Python con:
help(“sentencia|función|módulo”)

>>> help(“print”)
>>> help(“os”)

En el modo interactivo podemos obtener la lista de nombres de los atributos, de los métodos de una clase, un módulo o de cualquier objeto con dir():

>>> dir(“math”)

Errores de ejecución


Si el sistema no puede ejecutar un comando producirá una excepción:

caramelos_de_ayer = 10
caramelos_de_hoy = “cuatro”
mis_caramelos = caramelos_de_ayer + caramelos_de_hoy
print(mis_caramelos)

Excepción: 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'

El error se produce al intentar sumar datos de distinto tipo. En estas circunstancias no se puede hacer uso del operador suma “+”.


Modos para ejecutar código directamente:


Ejecutar un programa sin iniciar el entorno interactivo:

$ python3 ejemplo.py

Ejecutar un programa iniciando el entorno interactivo:

$ python3 -i ejemplo.py

Ejecutar el código Python contenido en una cadena de texto:

$ python3 -c 'for num in range(10): print(num)'



Relacionado:


Ir al índice del tutorial de Python

Primeros pasos

Introducción


Python es un lenguaje de programación multiplataforma y de alto nivel que fue creado por el holandés Guido van Rossum. Tiene una sintaxis muy limpia que favorece la lectura de los programas y permite la programación imperativa, orientada a objetos y funcional.

Guido Van Rossum,
autor del lenguaje Python

Python es un lenguaje interpretado de tipado dinámico. Los programas (.py) pueden escribirse en un editor ligero como Geany, que es capaz de ejecutar el código y compilarlo (.pyc). Además, tiene autocompletado, soporte multidocumento, gestión de proyectos, aplica colores de sintaxis y cuenta con un emulador de Terminal integrado.

Instalación de Python3


Aunque hay muchas distribuciones de Linux, como Ubuntu, que instalan Python de manera predeterminada, podemos encontrarnos que la versión instalada del intérprete no es 3.x. Hay que tener en cuenta que existen dos líneas de desarrollo de intérpretes Python (2.x y 3.x.) y que es posible tener instaladas versiones de ambas líneas. Dependiendo de la situación que tengamos el intérprete 3.x se podrá invocar desde la línea de comandos con: python y/o python3. Normalmente, la primera opción no se podrá utilizar si tenemos instalado algún intérprete 2.x porque se reserva para éste.

En GNU/Linux, para comprobar si tenemos instalado Python3 ejecutar desde la línea de comandos:

$ which python3

Si Python3 está instalado aparecerá en pantalla la ruta de instalación (/usr/bin/python3). En caso de no estar, no aparecerá ningún mensaje informativo y tendremos que proceder a su instalación. Para instalar en Ubuntu y en otros sistemas derivados de Debian la versión 3.x, ejecutar desde la línea de comandos: 

$ sudo apt-get install python3

Puede visitar el sitio oficial de Python (www.python.org) para descargar e instalar la última versión que haya disponible para los distintos sistemas operativos.

Los directorios de instalación, por defecto, en un equipo con Windows para la versión 3.x podrán ser C:\Python3x, C:\Archivos de programa o C:\Users\usuario\..., dependiendo de la versión de Windows y si Python se instala para que esté disponible para todos los usuarios o sólo para aquel que realiza la instalación.

En Windows, después de instalar Python es necesario modificar la variable de entorno “path”, agregando la ruta de Python, para poder usar el intérprete desde cualquier directorio. Los últimos instaladores tienen una opción para modificar dicha variable durante la instalación.

También, en Windows conviene agregar la ruta del directorio de las herramientas pip, easy_install, etc. Por ejemplo, en Python 3.4 se encuentran en c:\Python34\Scripts.

 

Intérprete en línea


Mostrar la versión que tenemos instalada de Python3:

$ python3 -V

Si no existe ninguna versión de Python 2.x:

$ python -V

(En adelante seguir la misma regla)

Ejecutar un script o un programa

$ python3 programa.py

Ejecutar un comando Python3

$ python3 -c comando [argumentos]

Ejemplo: 

$ python3 -c "print('Python3 te atrapa')"

Ampliar información

$ man python3


Nota de los autores



Python 3 para impacientes va dirigido a personas que tengan conocimientos básicos de programación (con haber tenido alguna experiencia con otro lenguaje de programación de alto nivel será suficiente) y que tengan cierta prisa en conocer las bondades de Python 3.x

En general, el manual carece de explicaciones extensas y está basado, principalmente, en breves ejemplos comentados y/o autoexplicativos. 

También, está pensado para aquellas personas que alguna vez programaron con alguna de las versiones de la rama 2.x de Python y que, después, no llegaron a trabajar con Python 3.x, que es cierto que tiene cambios pero tampoco son tantos y, mucho menos, traumáticos.   

Todos los ejemplos se han probado en un equipo con GNU/Linux (mi distribución preferida es Xubuntu) pero como Python es multiplataforma podrá programar también con otros sistemas operativos.

Por último, comentar que el editor utilizado para los ejemplos es el popular Geany, un IDE muy ligero que cumple fenomenalmente su misión, que es multiplataforma  y software libre, como todo lo demás.


Alejandro Suárez Lamadrid
Antonio Suárez Jiménez
Andalucía, ESPAÑA