David Sánchez Falero

david.sanchez.falero@gmail.com

@David_SanFal

Introducción a Python 3:

¿Por qué Python?

  • Fácil de aprender.
  • Fácil de leer.
  • Lenguaje de propósito general.
  • Una librería estándar muy completa.
  • Es multiplataforma.
  • Rápido de desarrollar.
  • Tiene una comunidad muy activa, de la cual aprender.
  • Es interpretado, no tienes que pelearte con el compilador.

¿Por qué Python 3?

Se resume en la frase que aparece en la wiki de python:

Short version: Python 2.x is legacy, Python 3.x is the present and future of the language

Index

  • "Hello World" en Python
  • Variables
  • Basic types (int, float and string)
  • Arithmetic operators
  • Logical operators
  • Conditional structures
  • Functions
  • List, Tuples and Strings
  • Dictionaries
  • I/O
  • Exceptions
  • Classes

Hello World


In [1]:
print("hello world")


hello world

Variables

Las variables actúan como contenedores para los datos. Puedes poner el dato que quieras almacenar dentro y usar el nombre de la variable siempre que quieras saber el contenido.

Las variables se definen asignándoles un nombre, el cual suele dar información del dato que contiene o que va a contener. Por ejemplo, si queremos almacenar un numero que corresponde a la edad de una persona que tiene 10 años, podemos utilizar la variable age para almacenar el numero 10.

Como contenedores, su contenido puede cambiar con solo reasignar su contenido.


In [2]:
age = 10
print(age)


10

In [3]:
age = "diez"
print(age)


diez

Basic types

Los datos que almacena una variable pueden ser de diferentes tipos. Vamos a ver 3 tipos básicos, los números enteros(int), con decimales(float) y las cadenas de texto(string). Como ejemplo, un int podría ser 12 o -345, un float podría ser 12.43 o -345.00 y string podría ser "soy un string" o 'Otro string'.

int


In [4]:
# int
a = 2
b = 4

print(a + b)


6

In [5]:
print(type(a))


<class 'int'>

float


In [6]:
# float
a = 2
b = 4.52

print(a + b)


6.52

In [7]:
print(type(b))


<class 'float'>

In [8]:
#from float to int
a = 2
b = 4.52

print(a + int(b))


6

string


In [9]:
#string
a = "2"
b = "4"

print(a + b)


24

In [10]:
print(type(b))


<class 'str'>

Play with types


In [11]:
a = "2"
b = "4"
c = 3

a + b + c


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-f9bcc88e78fb> in <module>()
      3 c = 3
      4 
----> 5 a + b + c

TypeError: Can't convert 'int' object to str implicitly

In [12]:
a = "2"
b = "4"
c = 3

print(a + b + str(c))


243

In [13]:
print(int(a) + float(b) + c)


9.0

In [14]:
a = "2"
b = 3

a * b


Out[14]:
'222'

Arithmetic operators

Como hemos visto antes, se puede hacer operaciones con diferentes tipos de datos. Vamos a ver los diferentes operadores aritméticos que existen en Python3.


In [15]:
print (3 + 4)


7

In [16]:
print (3 - 4)


-1

In [17]:
print (3 * 4)


12

In [18]:
print (3 / 4)


0.75

In [19]:
print (3 % 2)


1

In [20]:
print (3 ** 2) # 3^2


9

In [21]:
print (3 // 4) # floor division


0

In [22]:
a = 0
a += 2 #a = a + 2
print(a)


2

In [23]:
a //= 4 #a = a // 4
print(a)


0

Logical operators

Además de los operadores aritméticos, existen operadores lógicos. Vamos a ver los diferentes operadores lógicos que existen en Python3.


In [24]:
print(1 == 0)


False

In [25]:
print(1 > 0)


True

In [26]:
print(1 < 0)


False

In [27]:
print(1 <= 0)


False

In [28]:
print(1 >= 0)


True

También podemos hacer operaciones lógicas con los operadores and, or, not o utilizando True o False para comparar.


In [29]:
print(1 == 3.4 and "a" == 32)


False

In [30]:
print(1 == 3.4 or 1)


1

In [31]:
print(False == True)


False

In [32]:
print(23 == True)


False

In [33]:
print((1 == 3.4) == False)


True

In [34]:
print(not (1 == 3.4))


True

conditional structures

If, elif and else


In [35]:
a = 3
if a > 2:
    print("a > 2")
else:
    print("a <= 2")


a > 2

In [36]:
a = 1
if a > 2:
    print("a > 2")
else:
    print("a <= 2")


a <= 2

In [37]:
a = -3
if a >= 2:
    print("a => 2")
elif a <= 0:
    print("a <= 0")
else:
    print("0 < a < 2")


a <= 0

In [38]:
a = 1
if a >= 2:
    print("a => 2")
elif a <= 0:
    print("a <= 0")
else:
    print("0 < a < 2")


0 < a < 2

for


In [39]:
for a in range(4):
    print(a)

#range(4)=0,1,2,3


0
1
2
3

In [40]:
for a in range(1, 4):
    print(a)

#range(1, 4)=0,1,2,3


1
2
3

while


In [41]:
a = 0
while a < 4:
    print (a)
    a += 4


0

functions


In [42]:
def hello():
    print("hello world")
hello()


hello world

In [43]:
def printer(a):
    print(a)
a = "hello world"
printer(a)


hello world

In [44]:
printer(4)


4

In [45]:
def add(a, b):
    return a + b
c = add(1, 3)
print(c)


4

In [46]:
def add(a, b):
    result = a + b
    return result
d = add(1, 3)
print(d)


4

In [47]:
print(result) #Scope error


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-47-649afeeb4399> in <module>()
----> 1 print(result) #Scope error

NameError: name 'result' is not defined

In [48]:
def suma(a, b):
    c = a + b
    d = a - b
    return c, d
e, f = suma(2, 4)
print(e, f)


6 -2

lists, tuples and strings

Las listas y las tuplas son vectores iterables de elementos. Esto quiere decir que puede contener de 0 a n elementos y que se puede recorrer el contenido de la lista o la tupla preguntando que hay dentro o modificando su contenido. Se pueden almacenar como una variable más.

Un string una secuencia ordenada de longitud arbitraria de caracteres. Funciona igual que una tupla a efectos de iterar sobre sus elementos.

list


In [49]:
sampleList = [1,2,3,4,5,6,7,8]
print (sampleList[1])


2

In [50]:
sampleList = [1,2,3,4,5,6,7,8]
for a in sampleList:
    print(a)


1
2
3
4
5
6
7
8
  • .append(value) - añade value al final
  • .count('x') - número de apariciones de X
  • .index('x') - posición de X
  • .insert('y','x') - Inserta X en la posición Y
  • .pop() - Retorna y elimina el último elemento
  • .remove('x') - Elimina X
  • .reverse() - Da la vuelta a la lista
  • .sort() - Ordena la lista alfabéticamente en orden ascendente, o numéricamente en orden ascendente.

tuple


In [51]:
sampleTuple = (1,2,3,4,5,6,7,8)
for a in sampleList:
    print(a)


1
2
3
4
5
6
7
8

list vs tuple


In [52]:
myList = [1,2,3]
myList.append(4)

In [53]:
myTuple = (1,2,3)
myTuple.append(4)


---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-53-addde89d4d7d> in <module>()
      1 myTuple = (1,2,3)
----> 2 myTuple.append(4)

AttributeError: 'tuple' object has no attribute 'append'

string


In [54]:
a = "Monty Python"
print(a[6:10])


Pyth

In [55]:
print(a[-12:-7])


Monty

In [56]:
print(a[2:])


nty Python

In [57]:
print(a[:])


Monty Python

In [58]:
print(a)


Monty Python


In [59]:
print('Num %s' % 123.44)


Num 123.44

In [60]:
print('Num %i' % 123.44)


Num 123

In [61]:
print('Num %f' % 123.44)


Num 123.440000

In [62]:
print("Num %.2f" % 123.444)


Num 123.44

In [63]:
a = "abcdefghijklmnopqrstu"
print('%.10s' % a)


abcdefghij

In [64]:
a = "strings".replace("s", "S")
print(a)


StringS

In [65]:
print(a.startswith("St"))


True

In [66]:
print(a.endswith("ngs"))


False

dictionaries

Un diccionario es una colección de pares de datos con una relación de clave y valor.

Cada dato dentro de un diccionario tiene una clave asociada, con la que puede ser recuperado.


In [67]:
myDict = {"foo": 2,
          "bar": 20}
print(myDict ["bar"])


20

In [68]:
myDict = {"foo": 2,
          "bar": 20}
for a in myDict:
    print (a, myDict[a])


foo 2
bar 20

In [69]:
for a, b in myDict.items():
    print (a, b)


foo 2
bar 20

In [70]:
for a in myDict.values():
    print (a)


2
20

In [71]:
myDict = {"David": {'edad': 26,
                    'sexo': 'H'},
          "Rita": {'edad': 24,
                  'sexo': 'M'}}
for a in myDict:
    print (a)
    for b in myDict[a]:
        print (b, myDict[a][b])


Rita
edad 24
sexo M
David
edad 26
sexo H

I/O

hello.txt

Hola a todos,
soy un texto de prueba
para aprender como Python 3
manipula ficheros.

In [72]:
f = open('hello.txt', 'r') 
print(f.read(1))
print('-' * 10)
print(f.read())
f.close()


H
----------
ola a todos,
soy un texto de prueba
para aprender como Python 3
manipula ficheros.

In [73]:
f = open('hello.txt', 'r') 
print(f.readline())
print('-' * 10)
print(f.readline())
f.close()


Hola a todos,

----------
soy un texto de prueba


In [74]:
f = open('hello.txt', 'r')  
myList = []
for line in f:
    myList.append(line)
print(myList)
f.close()


['Hola a todos,\n', 'soy un texto de prueba\n', 'para aprender como Python 3\n', 'manipula ficheros.']

In [75]:
with open('hello.txt', 'r') as f:  
    myList = []
    for line in f:
        myList.append(line)
    print(myList)


['Hola a todos,\n', 'soy un texto de prueba\n', 'para aprender como Python 3\n', 'manipula ficheros.']

In [76]:
name = input("What is your name? ")

age = int(input("How old are you? "))

print ("%s, %s " % (name, age))


What is your name? David
How old are you? 26
David, 26 

exceptions

Interrupciones del flujo normal de ejecución de cualquier programa debido a un error.


In [77]:
var = '1'
try:
    var = var + 1
except:
    print("ERROR")
print(var)


ERROR
1

In [78]:
var = '1'
try:
    var = var + 1
except:
    var = int(var) + 1
print(var)


2

In [79]:
var = '1' 
try:
    var = var + 1
except TypeError as e:
     # e.message in python 2
     print("ERROR: %s" % e)
finally:
    print(var)


ERROR: Can't convert 'int' object to str implicitly
1

In [80]:
def add_one(var):
    try:
        var += 1
    except TypeError as e:
        print("ERROR: %s" % e)
        raise TypeError("TypeError: %s" % e)
    finally:
        print("var value: %s" % var)
    print("All correct")

add_one(1)


var value: 2
All correct

In [81]:
try:
    add_one("1")
except TypeError as e:
    print(e)


ERROR: Can't convert 'int' object to str implicitly
var value: 1
TypeError: Can't convert 'int' object to str implicitly

class

Una clase es una plantilla para la creación de objetos de datos según un modelo predefinido. Las clases se utilizan para representar entidades o conceptos.


In [82]:
class Counter(object):
    def __init__(self):
        self.current = 0
    def add(self, amount):
        self.current += amount
    def getCurrent(self):
        return self.current

myCounter = Counter()
myCounter.add(7)
a = myCounter.getCurrent()
print(a)


7

In [83]:
print(myCounter.current)


7

In [84]:
class Counter(object):
    def __init__(self, num):
        self.current = num
    def add(self, amount):
        self.current += amount
    def getCurrent(self):
        return self.current

myCounter = Counter(5)
print(myCounter.current)


5

In [85]:
try:
    myCounter = Counter()
except Exception as e:
    print(e)


__init__() missing 1 required positional argument: 'num'

In [86]:
class Counter(object):
    def __init__(self, num=0):
        self.current = num
    def add(self, amount):
        self.current += amount
    def getCurrent(self):
        return self.current

myCounter = Counter()
print(myCounter.current)


0

In [87]:
myCounter = Counter(5)
print(myCounter.current)


5

In [88]:
class Counter(object):
    def __init__(self, num=0):
        self.current = num
    def add(self, amount):
        self.current += amount
    def getCurrent(self):
        return self.current

class FullCounter(Counter):
    def remove(self, amount):
        self.current -= amount

myFullCounter = FullCounter(1)
myFullCounter.add(7)
a = myFullCounter.getCurrent()
print(a)


8

In [89]:
myFullCounter.remove(9)
a = myCounter.getCurrent()
print(a)


5

In [90]:
PI = 3.1416

class Figure(object):
    def __init__(self, name):
        self.name = name
        self.area = 0
    
    def print_area(self):
        print(self.area)
    
    def calculate_area(self):
        raise Exception("Define me!")

In [91]:
class Circle(Figure):
    def __init__(self, radio, name='Circle'):
        self.radio = radio
        super(Circle, self).__init__(name)
        
    def print_name(self):
        print(self.name)

In [92]:
a = Circle(2)
a.print_name()
a.calculate_area()
a.print_area()


Circle
---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-92-a6bb2de1559b> in <module>()
      1 a = Circle(2)
      2 a.print_name()
----> 3 a.calculate_area()
      4 a.print_area()

<ipython-input-90-b968f555673c> in calculate_area(self)
     10 
     11     def calculate_area(self):
---> 12         raise Exception("Define me!")

Exception: Define me!

In [93]:
class Circle(Figure):
    def __init__(self, radio, name='Circle'):
        self.radio = radio
        super(Circle, self).__init__(name)
        
    def print_name(self):
        print(self.name)
    
    def calculate_area(self):
        self.area = PI * (self.radio ** 2)

In [94]:
a = Circle(2)
a.print_name()
a.calculate_area()
a.print_area()


Circle
12.5664

In [95]:
class Square(Figure):
    def __init__(self, side1, side2, name='Square'):
        self.side1 = side1
        self.side2 = side2
        super(Square, self).__init__(name)

    def print_name(self):
        print(self.name)
    
    def calculate_area(self):
        self.area = self.side1 * self.side2

In [96]:
a = Square(2, 8)
a.print_name()
a.calculate_area()
a.print_area()


Square
16

Problemas para practicar

endswith()

Crear una función que sea capaz de identificar si la cadena A termina con la cadena B sin utilizar el método endswith() de python.

def myendswith(a, b)
    ...
    try:
        ...
    except:
        ...
    return endwith

Tiene que ser capar de gestionar errores de tipo (ej. que la cadena de entrada sea un numero)

Book List

Crear un script que sea capaz de almacenar, leer y escribir en un fichero tu lista de películas preferidas con una valoración y una descripción.

Se tiene que transformar en un diccionario para tratar con los datos durante la ejecución del programa.

save.txt

TITLE: titulo
STARS: 3
DESCRIPTION: una descripción de la película
que puede estar en diferentes líneas.
TITLE: otro titulo
STARS: 2
DESCRIPTION: una descripción de la película
que puede estar en diferentes líneas.

dict

my_movies={'titulo':{'stars': 3,
                     'description':'una descripción de la película\nque puede estar en diferentes líneas.\n'},
           'otro titulo':{'stars': 2,
                          'description':'una descripción de la película\nque puede estar en diferentes líneas.\n'}
           }