Curso Programacion Python3
Curso Programacion Python3
Introducción a la
programación
Resolución de problemas
● Un programador es una persona que resuelve
problemas, y para llegar a ser un programador
eficaz se necesita aprender a resolver problemas
de un modo riguroso y sistemático:
● Análisis
● Diseño
● Codificación
● Ejecución y validación del programa
Análisis del problema
Diseño de algoritmos
● Un algoritmo es un conjunto de
acciones que especifican la
secuencia de operaciones realizar,
en orden, para resolver un
problema.
Introducción a
python3
Características de Python
Python es un lenguaje:
● Interpetrado
● Alto nivel
● Multiparadigma, ya que soporta orientación
a objetos, programación imperativa y
programación funcional.
● Multiplataforma
● Libre
¿Por qué elegir python?
http://www.tiobe.com/tiobe-index/
Instalación de python3
● Instalación en linux debian/Ubuntu
○ En Debian 9 Stretch, la versión es la 3.5.3
○ En Ubuntu 18.04 Bionic, la versión es la 3.6.3
● Instalación en Windows
○ Descargar instalador (paquete MSI)
● Instalación en Mac
¿IDE o
Escribir y ejecutar programas python3 editor de
texto?
Uso del interprete
$ python3 programa.py
Mi primer programa en python3
Proceso mayor_edad
Definir edad como entero;
Escribir "Dime tu edad:";
Leer edad;
Si edad>=18 Entonces
Escribir "Eres mayor de edad";
FinSi
Escribir "Programa terminado";
FinProceso
Tipos de datos
básicos
Literales, variables y expresiones
● Literales enteros: 3, 12, -23 Variables:
● Literales reales: 12.3, 45.6
● Literales cadenas: >>> var = 5
'hola que tal!' >>> var
"Muy bien"
'''Podemos \n 5
ir al cine'''
Expresiones
a + 7
(a ** 2) + b
Operadores
● Operadores aritméticos: +, -, *, /, //, %, **.
● Operadores de cadenas: +, *
● Operadores de asignación: =
● Operadores de comparación: ==, !=, >=, >, <=, <
● Operadores lógicos: and, or, not
● Operadores de pertenencia: in, not in
Precedencia de operadores
1. Los paréntesis rompen la precedencia.
2. La potencia (**)
3. Operadores unarios (+ -)
4. Multiplicar, dividir, módulo y división entera (* % // )
5. Suma y resta (+ -)
6. Operador binario AND (&)
7. Operadores binario OR y XOR (^ |)
8. Operadores de comparación (<= < > >=)
9. Operadores de igualdad (<> == !=)
10. Operadores de asignación (=)
11. Operadores de pertenencia (in, in not)
12. Operadores lógicos (not, or, and)
Tipos de datos
★ Tipos númericos >>> type(5)
<class 'int'>
○ Tipo entero (int)
>>> type(5.5)
○ Tipo real (float) <class 'float'>
★ Tipos booleanos (bool) >>> type([1,2])
<class 'list'>
★ Tipo de datos secuencia >>> type(int)
○ Tipo lista (list) <class 'type'>
○ Tipo tuplas (tuple)
★ Tipo de datos cadenas de caracteres
○ Tipo cadena (str)
★ Tipo de datos mapas o diccionario (dict)
Tipos de datos numéricos
>>> entero = 7 +: Suma dos números
>>> type(entero) -: Resta dos números
<class 'int'> *: Multiplica dos números
>>> real = 7.2 /: Divide dos números, el resultado es float.
>>> type (real) //: División entera
<class 'float' %: Módulo o resto de la división
**: Potencia
>>> a=int(7.2) +, -: Operadores unarios positivo y negativo
>>> a >>> abs(-7)
7
>>> a=int("345")
7
>>> a >>> divmod(7,2)
345 (3, 1)
>>> import math
>>> b=float(1) >>> hex(255)
>>> b >>> math.sqrt(9)
'0xff'
1.0 3.0
>>> pow(2,3)
>>> =float("1.234")
>>> b
8
1.234 >>>
>>> a=int("123.3") round(7.567,1)
7.6
Tipo de datos booleanos
True, False ¿Qué valores se consideran falsos?
● False
● Cualquier número 0. (0, 0.0)
● Cualquier secuencia vacía ([], (), '')
● Cualquier diccionario vacío ({})
>>> a = 5
>>> a = 5
>>> a
>>> a
5
5
>>> a = 8
>>> del a
>>> a
>>> a
8
Traceback (most recent call
>>> a = a + 1
last):
>>> a+=1
File "<stdin>", line 1, in
>>> 10
<module>
NameError: name 'a' is not
definedOtros operadores de asignación: +=, -=, *=, /=, %=, **=, //= .
input
Entrada y salida estándar
>>> nombre=input("Nombre:")
Nombre:jose
print >>> nombre
'jose'
>>> print(1,2,3) >>> edad=int(input("Edad:"))
1 2 3 Edad:23
>>> edad
>>> print("Hola son las",6,"de la tarde")
Hola son las 6 de la tarde 23
print("Hola",nombre)
print(var," ",end="")
numero <- 7;
numero = 7
trunc(7/2)
7 // 2
Pasando de pseudocódigo a python3
raiz(9)
import math
math.sqrt(9)
subcadena(cadena,0,0)
cadena[0]
cadena = cadena.upper()
Curso Introducción a la
programación con Python3
Estructuras de
control
Estructura de control: Alternativas
Alternativa simple
edad = int(input("Dime tu
edad:"))
if edad>=18:
print("Eres mayor de edad")
print("Programa terminado") Alternativa doble
edad = int(input("Dime tu
edad:"))
if edad>=18:
print("Eres mayor de edad")
else:
print("Eres menor de edad")
print("Programa terminado")
Estructura de control: Alternativas
Alternativa múliple (pseudocódigo)
Proceso notas
Alternativa múltiple en python3
Definir nota como entero;
Escribir "Dime tu nota:"; nota = int(input("Dime tu nota:"))
Leer nota; if nota >=1 and nota <= 4:
Segun nota Hacer print("Suspenso")
1,2,3,4: Escribir "Suspenso";
elif nota == 5:
5: Escribir "Suficiente";
print("Suficiente")
6,7: Escribir "Bien";
8: Escribir "Notable";
elif nota == 6 or nota == 7:
9,10: Escribir "Sobresaliente"; print("Bien")
De Otro Modo: elif nota == 8:
Escribir "Nota incorrecta"; print("Notable")
FinSegun elif nota ==9 or nota == 10:
Escribir "Programa terminado"; print("Sobresaliente")
FinProceso else:
print("Nota incorrecta")
print("Programa terminado")
Estructura de control repetitivas: while
while
secreto = "asdasd"
Instrucciones: break
clave = input("Dime la clave:")
while clave != secreto: secreto = "asdasd"
print("Clave incorrecta!!!") clave = input("Dime la clave:")
clave = input("Dime la clave:") while clave != secreto:
print("Bienvenido!!!")
print("Clave incorrecta!!!")
print("Programa terminado")
otra = input("¿Quieres introducir otra clave (S/N)?:")
if otra.upper()=="N":
Instrucciones: continue break;
cont = 0 clave = input("Dime la clave:")
while cont<10: if clave == secreto:
cont = cont + 1 print("Bienvenido!!!")
if cont % 2 != 0: print("Programa terminado")
continue
print(cont)
¿Y la estructura “Repetir” de pseudocódigo?
Proceso login
Definir secreto, clave como cadena;
secreto <- "asdasd";
Repetir
Escribir "Dime la clave:";
Leer clave;
Si clave<>secreto Entonces
Escribir "Clave incorrecta!!!";
FinSi
Hasta Que clave=secreto
Escribir "Bienvenido!!!";
Escribir "Programa terminado";
FinProceso secreto = "asdasd"
while True:
clave = input("Dime la clave:")
if clave != secreto:
print("Clave incorrecta!!!")
if clave == secreto:
break;
print("Bienvenido!!!")
print("Programa terminado")
Estructura de control repetitivas: for
Proceso Contar
Definir var como Entero;
Para var<-1 Hasta 10 Hacer
Escribir Sin Saltar var," ";
FinPara
FinProceso
for var in range(1,11):
print(var," ",end="")
Proceso ContarDescesdente
Definir var como Entero;
Para var<-10 Hasta 1 Con Paso -1 Hacer
Escribir Sin Saltar var," ";
FinPara
FinProceso
for var in range(10,0,-1):
print(var," ",end="")
Proceso ContarPares
Definir var como Entero;
Para var<-2 Hasta 10 Con Paso 2 Hacer
Escribir Sin Saltar var," ";
FinPara
FinProceso
for var in range(2,11,2):
print(var," ",end="")
Usos específico de variables: contadores
cont = 0; El contador se inicializa a un valor inicial
for var in range(1,6):
num = int(input("Dime un número:"))
if num % 2 == 0:
El contador se incrementa
cont = cont + 1 Un contador también se puede decrementar
print("Has introducido ",cont," números pares.")
Un contador es una variable entera que la utilizamos para contar cuando ocurre un
suceso.
¿A qué valor
Un indicador es una variable lógica, que usamos para recordar o indicar algún
suceso.
Curso Introducción a la
programación con Python3
Tipos de datos
secuencias
Tipo de datos cadenas de caracteres
>>> cad1 = "Hola" +: Concatenación
>>> cad2 = '¿Qué tal?' *: Repetición
>>> cad3 = '''Hola, Indexación
que tal?''' Longitud
Recorrido
>>> cadena = "informática"
>>> for caracter in cadena:
... print(caracter,end="")
Slice ...
>>> cadena[2:5] informática
'for' Operadores de pertenencia
>>> cadena[2:7:2] >>> "a" in cadena
'frá'
>>> cadena[:5]
True
'infor' >>> "b" in cadena
>>> cadena[5:] False
'mática' >>> "a" not in cadena
>>> cadena[-1:-3] False >>> cad = str(7.8)
'' >>> type(cad)
>>> cadena[::-1] <class 'str'>
'acitámrofni' >>> print(cad)
7.8
Las cadenas de caracteres son inmutables
No podemos cambiar los caracteres de una cadena de la siguiente forma:
>>> cadena = "informática"
>>> cadena[2]="g"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> sorted(lista1)
Listas multidimensionales [10, 20, 30, 40, 50]
>>> tabla = [[1,2,3],[4,5,6],[7,8,9]]
>>> tabla[1][1]
>>> sorted(lista1,reverse=True)
5
[50, 40, 30, 20, 10]
>>> for fila in tabla:
... for elem in fila:
... print(elem,end="")
... print()
Las listas son mutables
Los elementos de las listas se pueden modificar:
>>> lista1 = [1,2,3]
>>> lista1[2]=4
>>> lista1 ¿Cómo se copian las listas?
[1, 2, 4] Para copiar una lista en otra no podemos utilizar el operador de asignación:
>>> del lista1[2] >>> lista1 = [1,2,3]
>>> lista1 >>> lista2 = lista1
[1, 2] >>> lista1[1] = 10
>>> lista2
[1, 10, 3]
Los métodos de las listas
modifican el contenido de la lista: El operador de asignación no crea una nueva lista, sino que nombra con dos
>>> lista1.append(3) nombres distintos a la misma lista, por lo tanto la forma más fácil de copiar
>>> lista1 una lista en otra es:
[1, 2, 3] >>> lista1 = [1,2,3]
>>> lista2=lista1[:]
>>> lista1[1] = 10
>>> lista2
[1, 2, 3]
Métodos principales de listas
>>> lista = [1,2,3]
>>> lista.append(4)
>>> lista
[1, 2, 3, 4]
Tipos de datos
mapas
Tipo de datos mapas: diccionarios
>>> dicccionario = {'one': 1, 'two': 2, 'three': 3}
>>> dict1 = {}
>>> dict1["one"]=1
>>> dict1["two"]=2
>>> dict1["three"]=3
Longitud Eliminación
>>> len(a) >>> del(a["one"])
3 >>> a
{'three': 3, 'two': 2}
Indexación
>>> a["one"] Operadores de pertenencia
1 >>> "two" in a
>>> a["one"]+=1 True
>>> a
{'three': 3, 'one': 2, 'two': 2}
Los diccionarios son mutables
Los elementos de los diccionarios se pueden modificar:
>>> a = {'one': 1, 'two': 2, 'three': 3}
>>> a["one"]=2
>>> del(a["three"])
>>> a
{'one': 2, 'two': 2}
¿Cómo se copian los diccionarios?
Para copiar un diccionario en otra no podemos utilizar el operador de
asignación:
>>> a = {'one': 1, 'two': 2, 'three': 3}
>>> b = a
>>> del(a["one"])
>>> b
{'three': 3, 'two': 2}
Excepciones
Excepciones
>>> 4/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> a+4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> "2"+2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly
Manejando excepciones
>>> try:
... print (10/int(cad))
... except ValueError:
... print("No se puede convertir a entero")
... except ZeroDivisionError:
... print("No se puede dividir por cero")
... except:
... print("Otro error")
Manejando excepciones
>>> try:
... print (10/int(cad))
... except ValueError:
... print("No se puede convertir a entero")
... except ZeroDivisionError:
... print("No se puede dividir por cero")
... else:
... print("Otro error")
>>> try:
... result = x / y
... except ZeroDivisionError:
... print("División por cero!")
... else:
... print("El resultado es", result)
... finally:
... print("Terminamos el programa")
Curso Introducción a la
programación con Python3
Introducción a los
módulos
Introducción a los módulos
Módulo: Cada uno de los ficheros .py que nosotros creamos se llama módulo. Los elementos creados
en un módulo (funciones, clases, ...) se pueden importar para ser utilizados en otro módulo. El
nombre que vamos a utilizar para importar un módulo es el nombre del fichero.
● time ● os
>>> time.sleep(1) >>> os.system(“clear”)
● datetime
Curso Introducción a la
programación con Python3
Programación
estructurada
Programación estructurada
Con la programación modular y estructura, un problema complejo debe ser dividido en varios
subproblemas más simples, y estos a su vez en otros subproblemas más simples. Esto debe hacerse hasta
obtener subproblemas lo suficientemente simples como para poder ser resueltos fácilmente con algún
algoritmo (divide y vencerás). Además el uso de subrutinas nos proporciona la reutilización del código y no
tener repetido instrucciones que realizan la misma tarea.
Para llamar a una función se debe utilizar su nombre y entre paréntesis los parámetros
reales que se mandan. La llamada a una función se puede considerar una expresión
cuyo valor y tipo es el retornado por la función.
Ámbito de variables
Variables locales: se declaran dentro de una función y no se pueden utilizar fuera
de esa función
Programación
orientada a objetos
Introducción a la Programación orientada a Objetos
import math Llamamos clase a la representación abstracta de un concepto.
class punto(): Las clases se componentes de atributos y métodos.
""" Representación de un punto en el
plano, los atributos son x e y Los atributos definen las características propias del objeto y
que representan los valores de las modifican su estado.
coordenadas cartesianas."""
def __init__(self,x=0,y=0): Los métodos son bloques de código (o funciones) de una clase
self.x=x que se utilizan para definir el comportamiento de los objetos.
self.y=y
>>> punto1=punto()
>>> punto2=punto(4,5)
>>> print(punto1.distancia(punto2))
6.4031242374328485
Para crear un objeto, utilizamos el nombre de la clase enviando
como parámetro los valores que va a recibir el constructor.
>>> punto2.x
4
>>> punto2.x = 7
>>> punto2.x
Podemos acceder y modificar los atributos de objeto.
7
Encapsulamiento
La característica de no acceder o modificar los valores de los atributos
directamente y utilizar métodos para ello lo llamamos encapsulamiento.
class circulo():
def __init__(self,radio): >>> c1=circulo(3)
self.radio=radio >>> c1.radio
Estoy dando el radio
@property 3
def radio(self):
>>> c1.radio=4
print("Estoy dando el radio")
return self.__radio >>> c1.radio=-1
Radio debe ser positivo
@radio.setter >>> c1.radio
def radio(self,radio): 0
if radio>=0:
self.__radio = radio
else:
raise ValueError("Radio positivo")
self.__radio=0
La clase punto3d hereda de la clase punto todos sus propiedades y sus métodos. En la
clase hija hemos añadido la propiedad y el setter para el nuevo atributo z, y hemos
Herencia modificado el constructor (sobreescritura) el método mostrar y el método distancia.
class punto3d(punto):
>>> p3d=punto3d(1,2,3)
def __init__(self,x=0,y=0,z=0):
super().__init__(x,y) >>> p3d.x
self.z=z 1
@property >>> p3d.z
def z(self): 3
print("Doy z") >>> p3d.mostrar()
return self.__z
1:2:3
@z.setter >>> p3d.y = 3
def z(self,z):
print("Cambio z")
self.__z=z
def mostrar(self):
return "Centro:{0}-Radio:{1}".format(self.centro.mostrar(),self.radio)
>>> c1=circulo(punto(2,3),5)
>>> print(c1.mostrar())
Centro:2:3-Radio:5
>>> c1.centro.x = 3