Introducción a Python (3)


Manipulando datos


Números

Enteros


In [1]:
2 + 2


Out[1]:
4

In [2]:
(50 + 30) * 5


Out[2]:
400

In [3]:
7 / 2


Out[3]:
3.5

In [4]:
7 % 3


Out[4]:
1

In [5]:
8271620372012 ** 16


Out[5]:
480230242785895041523601081047580269312718942941866053961384580763944229024067667717573401492913853961842995096084912848441403451269527097736198573582491135229983829269574216050363217514543552009868637372416

Float


In [6]:
3 * 4.5 / 2.9


Out[6]:
4.655172413793103

In [7]:
27 / 4.2


Out[7]:
6.428571428571428

Decimal


In [8]:
from decimal import Decimal
dos = Decimal(2)
dos.sqrt()


Out[8]:
Decimal('1.414213562373095048801688724')

In [9]:
from decimal import getcontext
getcontext().prec = 55
dos.sqrt()


Out[9]:
Decimal('1.414213562373095048801688724209698078569671875376948073')

Otras bases


In [10]:
0xb


Out[10]:
11

In [11]:
hex(11)


Out[11]:
'0xb'

In [12]:
0b101


Out[12]:
5

In [13]:
bin(4)


Out[13]:
'0b100'

In [14]:
0o10


Out[14]:
8

In [15]:
oct(8)


Out[15]:
'0o10'

Strings (cadenas)


In [16]:
"Un «string» es una cadena de caracteres"


Out[16]:
'Un «string» es una cadena de caracteres'

In [17]:
"""Que el código que escribimos funcione, es una excepción.
-- Manuel Kaufmann"""


Out[17]:
'Que el código que escribimos funcione, es una excepción.\n-- Manuel Kaufmann'

In [18]:
"Me gusta decir 'Dale' para confirmar"


Out[18]:
"Me gusta decir 'Dale' para confirmar"

In [19]:
"¡Quiero usar \"la misma\" comilla dentro de la cadena!"


Out[19]:
'¡Quiero usar "la misma" comilla dentro de la cadena!'

Operaciones


In [20]:
"Hola" + " mundo!"


Out[20]:
'Hola mundo!'

In [21]:
"Eco " * 5


Out[21]:
'Eco Eco Eco Eco Eco '

In [22]:
len("¿cuánto mide esta cadena?")


Out[22]:
25

In [23]:
"Camión y moño expresado en UTF-8".encode('utf-8')


Out[23]:
b'Cami\xc3\xb3n y mo\xc3\xb1o expresado en UTF-8'

In [24]:
'¿Cuántas a tiene esta cadena?'.count('a')


Out[24]:
5

Acceso a strings


In [25]:
frase = "¡Hola mundo!"
frase


Out[25]:
'¡Hola mundo!'


In [26]:
frase[1]


Out[26]:
'H'

In [27]:
frase[-3]


Out[27]:
'd'

In [28]:
frase[1:5]


Out[28]:
'Hola'

In [29]:
frase[6:]


Out[29]:
'mundo!'

In [30]:
frase[6:-1]


Out[30]:
'mundo'

In [31]:
frase_con_espacios = '¡ H o l a   M u n d o !'
frase_con_espacios


Out[31]:
'¡ H o l a   M u n d o !'

In [32]:
frase_con_espacios[::2]


Out[32]:
'¡Hola Mundo!'

Listas


In [33]:
lista = [2, 'auto', 5.32, Decimal(2)]
lista


Out[33]:
[2, 'auto', 5.32, Decimal('2')]

In [34]:
lista[2]


Out[34]:
5.32

In [35]:
lista[-1]


Out[35]:
Decimal('2')

In [36]:
lista[:-2]


Out[36]:
[2, 'auto']

Operaciones


In [37]:
lista + [125, 'camión']


Out[37]:
[2, 'auto', 5.32, Decimal('2'), 125, 'camión']

In [38]:
lista[1] = "bicicleta"
lista


Out[38]:
[2, 'bicicleta', 5.32, Decimal('2')]

In [39]:
lista[1] = ['auto', 'moto', "bicicleta", 'camión']
lista


Out[39]:
[2, ['auto', 'moto', 'bicicleta', 'camión'], 5.32, Decimal('2')]

In [40]:
del lista[2]
lista


Out[40]:
[2, ['auto', 'moto', 'bicicleta', 'camión'], Decimal('2')]

Métodos


In [41]:
vehiculos = lista[1]
vehiculos


Out[41]:
['auto', 'moto', 'bicicleta', 'camión']

In [42]:
vehiculos.sort()  # in place
vehiculos


Out[42]:
['auto', 'bicicleta', 'camión', 'moto']

¿Se modificó la variable "lista"?


In [43]:
lista[1]


Out[43]:
['auto', 'bicicleta', 'camión', 'moto']

¿Porqué sucede esto?


In [44]:
vehiculos.index('camión')


Out[44]:
2

In [45]:
vehiculos.append('patineta')
vehiculos


Out[45]:
['auto', 'bicicleta', 'camión', 'moto', 'patineta']

Conjuntos


In [46]:
numeros = {1, 2, 3, 4, 1, 5, 2, 7, 2, 4, 6}
numeros


Out[46]:
{1, 2, 3, 4, 5, 6, 7}

In [47]:
otros_numeros = {4, 7, 1, 9, 2, 8}

In [48]:
otros_numeros.update([5, 6, 5, 3, 1, 6, 9])  # in place
otros_numeros


Out[48]:
{1, 2, 3, 4, 5, 6, 7, 8, 9}

Métodos y operaciones


In [49]:
numeros.intersection(otros_numeros)


Out[49]:
{1, 2, 3, 4, 5, 6, 7}

In [50]:
numeros & otros_numeros


Out[50]:
{1, 2, 3, 4, 5, 6, 7}

In [51]:
numeros.union(otros_numeros)


Out[51]:
{1, 2, 3, 4, 5, 6, 7, 8, 9}

In [52]:
numeros | otros_numeros


Out[52]:
{1, 2, 3, 4, 5, 6, 7, 8, 9}

In [53]:
numeros.difference(otros_numeros)


Out[53]:
set()

In [54]:
numeros - otros_numeros


Out[54]:
set()

Diccionarios


In [55]:
diccionario = {'entero': 1, 'lista': ['cadena', 92, 4.2], 3: 'tres'}
diccionario


Out[55]:
{3: 'tres', 'lista': ['cadena', 92, 4.2], 'entero': 1}

Las llaves pueden ser cualquier objeto inmutable


In [56]:
otro_diccionario = {3.4: 'tres punto cuatro', 2000: 'dos mil', (3, 4): 'version de Python'}
otro_diccionario


Out[56]:
{2000: 'dos mil', 3.4: 'tres punto cuatro', (3, 4): 'version de Python'}

In [57]:
otro_diccionario[(3, 4)]


Out[57]:
'version de Python'

In [58]:
otro_diccionario[3.4]


Out[58]:
'tres punto cuatro'

In [59]:
del diccionario['lista']
diccionario


Out[59]:
{3: 'tres', 'entero': 1}

Métodos


In [60]:
'entero' in diccionario


Out[60]:
True

In [61]:
diccionario.keys()


Out[61]:
dict_keys([3, 'entero'])

In [62]:
diccionario.values()


Out[62]:
dict_values(['tres', 1])

In [63]:
diccionario.items()


Out[63]:
dict_items([(3, 'tres'), ('entero', 1)])

In [64]:
diccionario.get(3)


Out[64]:
'tres'

In [65]:
diccionario.get(42, 'No tenemos esa *key*')


Out[65]:
'No tenemos esa *key*'

In [66]:
diccionario.pop('entero')


Out[66]:
1

In [67]:
diccionario


Out[67]:
{3: 'tres'}

Tomando decisiones


if

if <condicion>:
    <hago algo>

Ejemplos


In [68]:
condicion = True
if condicion:
    print('Hago algo')


Hago algo

In [69]:
# Test de mayoría de edad
edad = 19
if edad >= 20:
    print('Te puedo vender alcohol')
elif 18 <= edad <= 20:
        print('Andá a Argentina que podés tomar alcohol con 18')
else:
    print('Volvé el año que viene')


Andá a Argentina que podés tomar alcohol con 18

In [70]:
if 'lista' in diccionario:
    print('El diccionario tiene el elemento "lista"')
else:
    print('No encontramos ese elemento')


No encontramos ese elemento

In [71]:
color = input('¿Qué color te gusta?: ')
if color == 'rojo' or color == 'verde':
    print('A mi también')
else:
    print('Qué feo ese color!')


¿Qué color te gusta?: azul
Qué feo ese color!

In [72]:
color = input('¿Qué color te gusta?: ')
colores = ['rojo', 'amarillo', 'violeta', 'azul', 'verde', 'turquesa']
if color in colores:
    if color == 'rojo' or color == 'verde':
        print('A mi también')
    else:
        print('Qué feo ese color!')
else:
    print('Ese no es un color válido')


¿Qué color te gusta?: turquesa
Qué feo ese color!

for

for <elemento> in <iterable>:
    <hago algo>

In [73]:
vehiculos


Out[73]:
['auto', 'bicicleta', 'camión', 'moto', 'patineta']

In [74]:
for vehiculo in vehiculos:
    print('Transporte: ' + vehiculo.capitalize())


Transporte: Auto
Transporte: Bicicleta
Transporte: Camión
Transporte: Moto
Transporte: Patineta

In [75]:
# obteniendo cuadrados
for numero in range(1, 7):
    print(numero ** 2)


1
4
9
16
25
36

In [76]:
for numero in range(1, 7):
    if numero == 3:
        continue  # ¿qué pasa si pongo un "break" acá?
    print(numero ** 2)
else:
    print('Termino sin ningún "break"')


1
4
16
25
36
Termino sin ningún "break"

while

while <condicion>:
    <hago algo>

In [77]:
edad = 12
while edad < 18:
    print('No te puedo vender alcohol')
    edad += 1
print('Cumpliste la mayoría de edad: {} años'.format(edad))


No te puedo vender alcohol
No te puedo vender alcohol
No te puedo vender alcohol
No te puedo vender alcohol
No te puedo vender alcohol
No te puedo vender alcohol
Cumpliste la mayoría de edad: 18 años

In [78]:
respuesta_correcta = 36
respuesta_usuario = int(input('¿Cuánto es 6^2?: '))
while respuesta_usuario != respuesta_correcta:
    respuesta_usuario = int(input('Error. Intenta de nuevo: '))
print('Felicitaciones! La respuesta correcta es: {}'.format(respuesta_correcta))


¿Cuánto es 6^2?: 43
Error. Intenta de nuevo: 33
Error. Intenta de nuevo: 12
Error. Intenta de nuevo: 2
Error. Intenta de nuevo: 5
Error. Intenta de nuevo: 2
Error. Intenta de nuevo: 36
Felicitaciones! La respuesta correcta es: 36

Excepciones

try:
    <codigo que "puede" fallar>
except <excepcion>:
    <codigo que maneja esa excepcion>

In [80]:
17 / 0


---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-80-3bf37c425175> in <module>()
----> 1 17 / 0

ZeroDivisionError: division by zero

In [81]:
try:
    print(17 / 0)
except ZeroDivisionError:
    print('No se puede dividir un número por 0')


No se puede dividir un número por 0

Podemos generar nuestra propias excepciones


In [82]:
raise ValueError('Mensaje de error')


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-82-ad5f9844780e> in <module>()
----> 1 raise ValueError('Mensaje de error')

ValueError: Mensaje de error

Organizando el código


Funciones

def <nombre funcion>(<argument 1>, <argumento 2>, ...):
    <codigo de la funcion>

In [83]:
def alcubo(numero):
    return numero ** 3

In [84]:
alcubo(3)


Out[84]:
27

Objetos


In [85]:
alcubo(27)


Out[85]:
19683

In [86]:
alcubo


Out[86]:
<function __main__.alcubo>

In [87]:
f = alcubo
f(3)


Out[87]:
27

Flexibilidad en los argumentos


In [88]:
def ordenar_lista(l, ascendente=True):
    resultado = sorted(l)
    if not ascendente:
        resultado = list(reversed(resultado))
    return resultado

lista = [3, 5, 1, 7, 12, 7, 4]
ordenar_lista(lista)


Out[88]:
[1, 3, 4, 5, 7, 7, 12]

In [89]:
ordenar_lista(lista, True)


Out[89]:
[1, 3, 4, 5, 7, 7, 12]

In [90]:
ordenar_lista(lista, ascendente=False)


Out[90]:
[12, 7, 7, 5, 4, 3, 1]

In [91]:
def multiplica_elementos(*args):
    resultado = 1
    for elemento in args:
        resultado *= elemento
    return resultado

multiplica_elementos(3, 4, 5, 2, 8)  # cantidad de argumentos indefinda


Out[91]:
960

In [92]:
multiplica_elementos(3, 9)


Out[92]:
27

In [93]:
def suma_dos_numeros(a, b):
    return a + b

numeros = [4, 6]
suma_dos_numeros(*numeros)


Out[93]:
10

Clases


In [94]:
import math

class Punto2D(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y
        
    def distancia(self):
        """Distancia al punto desde (0,0)"""
        distancia = math.sqrt(self.x ** 2 + self.y ** 2)
        return distancia

In [95]:
p1 = Punto2D(3, 4)
p1.x


Out[95]:
3

In [96]:
p1.distancia()


Out[96]:
5.0

In [97]:
p2 = Punto2D(7, 12)
p2.y


Out[97]:
12

Módulos


In [98]:
%%file punto.py
import math

class Punto2D(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y
        
    def distancia(self):
        """Distancia al punto desde (0,0)"""
        distancia = math.sqrt(self.x ** 2 + self.y ** 2)
        return distancia


Writing punto.py

In [99]:
import punto

p3 = punto.Punto2D(5, 3)
p3.distancia()


Out[99]:
5.830951894845301

Paquetes


In [100]:
import mipaquete.modulo
print(mipaquete.modulo.FRASE)


---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-100-d6ea12d9a8ec> in <module>()
----> 1 import mipaquete.modulo
      2 print(mipaquete.modulo.FRASE)

ImportError: No module named 'mipaquete'

In [101]:
from mipaquete import modulo
print(modulo.FRASE)


---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-101-f276dab83b0d> in <module>()
----> 1 from mipaquete import modulo
      2 print(modulo.FRASE)

ImportError: No module named 'mipaquete'

In [102]:
from mipaquete.modulo import FRASE
print(FRASE)


---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-102-4d512e061f22> in <module>()
----> 1 from mipaquete.modulo import FRASE
      2 print(FRASE)

ImportError: No module named 'mipaquete'