Sintaxis Python
Contents
Sintaxis Python#

Sintáxis básica de Python 3.8
Índice
Elementos básicos del lenguaje#
Instalación#
Instalación:
sudo apt install python3
Extensión de archivos: .py
Comentarios#
Comentarios de una sola línea:
1# Comentario de una sola línea
Comentarios multilínea:
1"""
2Este comentario
3tiene más de una línea.
4Puede servir para escribir
5un manual u otras cosas.
6"""
Entrada y salida estandar#
1# entrada estandar:
2dato = input('introduce un dato: ')
3
4# salida estandar:
5print(dato)
6
7# salida en una sola línea:
8for i in range(1,11):
9 print("{}...".format(i), end="")
Estructura en python#
1import random
2
3numero_aleatorio = random.randint(1, 20)
4
5print(numero_aleatorio)
Atención
En Python no se hace uso de llaves ni de ; final
Concatenación#
Concatenación de variables y cadenas se realiza con +
1# concatenación con +
2print("cadena concatenada a " + "otra cadena")
3
4variable = "Pepe"
5print("resultado en variable: " + variable)
6
7# usando format para colocar variables:
8nombre = "Guillermo"
9apellidos = "Granados Gómez"
10print("Me llamo {} y mis apellidos son {}.".format(nombre, apellidos))
Python-CLI - Comandos de python#
Comandos de python y pip:
python3: abre la consola de python y con exit() se puede cerrar.
python3 –version: versión usada
python3 archivo.py: ejecuta un script python.
Variables y tipos de datos#
Declaración, asignación y tipo:
1cadena = "Cadena de texto"
2entero = 27
3decimal = 23.27
4booleano = True # False
5lista = ['datos', 2, 3.2, False]
6tupla = ('dato uno', 2)
7diccionario = {
8 'nombre': 'Pepe',
9 'telefono': 753283723
10}
Constantes:
1CONSTANTE = "soy una presunta constante"
Operadores#
Operadores aritméticos#
Operaciones aritméticas:
1sumar = 3 + 6
2restar = 7 * 9
3multiplicar = 11 * 6
4dividir = 13 / 20
5resto = 54 % 7
6potencia = 3 ** 5
Asignar operación:
1# la variable debe tener un valor asignado:
2resultado = 0
3
4resultado += 12
5resultado -= 16
6resultado *= 19
7resultado /= 6
8resultado **= 5
Operadores relacionales#
Validación entre dos números.
Mayor que: >.
Menor que: <.
Mayor o igual que: >=.
Menor o igual que: <=.
Igual que: ==.
Operadores lógicos#
Expresiones de operaciones lógicas.
and: and.
or: or.
not: !.
Estructuras de control#
Condicional if#
if sencillo:
1edad = 18;
2
3if edad >= 18:
4 print("Eres mayor de edad")
if / else:
1edad = 15
2
3if edad >= 18:
4 print("Eres mayor de edad")
5else:
6 print("Eres menor de edad")
else-if:
1edad = 45
2
3if edad >= 65 :
4 print("Eres un anciano")
5
6elif edad >= 18:
7 print("Eres mayor de edad")
8else:
9 print("Eres menor de edad")
Operador ternario:
1edad = int(input("Introduce tu edad: "))
2print("eres mayor de edad") if (edad >= 18) else print("Todavía eres menor de edad")
Condicional Switch#
No existe el condicional Switch en Python, su alternativa es usar if-elif-else
Bucle for#
for básico:
1for i in range(1,10):
2 print("Repetición nº {} \n".format(i))
for clave / valor:
1electrodomesticos = {
2 "producto": "Nevera",
3 "modelo": "FX27",
4 "marca": "Fagor",
5 "precio": 783.23
6}
7
8for key, value in electrodomesticos.items():
9 print("{}: {} \n".format(key, value))
Bucle while#
While sencillo:
1num = 0
2
3while num < 10:
4 print("código de mensaje - {}".format(num))
5 num += 1
While infinito:
1numero = 10
2# al añadir True hacemos un bucle infinito:
3while True:
4 adivina = int(input('Adivinia el número >> '))
5
6 if adivina == numero:
7 print('Acertaste!')
8 # Con exit() finalizamos el programa
9 exit()
10
11 print('Fallaste!')
Detener secuenda de script#
1for i in range(10):
2 if(i == 5):
3 print("Ya has llegado a 5 y no irás más lejos")
4 exit()
5
6print("Esta frase no se mostrará")
Compresión de listas#
Las compresión de lista es un método para recuperar una serie de valores y agregarlos a una lista en una sola secuencia:
1# tenemos un diccionario:
2lista_consolas = [
3 {'marca': 'Sega', 'modelo':'Mega Drive', 'generación': '4ª Generación'},
4 {'marca': 'Sega', 'modelo':'Master System', 'generación': '3ª Generación'},
5 {'marca': 'Sony', 'modelo':'PlayStation', 'generación': '5ª Generación'},
6 {'marca': 'Nintendo', 'modelo':'Gamecube', 'generación': '6ª Generación'}
7]
8
9# se crea una lista y dentro lo primero que anotamos es el dato a recuperar y acto seguido el bucle sobre la lista de valores:
10consolas = [consola['modelo'] for consola in lista_consolas]
11
12print(consolas)
Con condición:
1lista_consolas = [
2 {'marca': 'Sega', 'modelo':'Mega Drive', 'generación': '4ª Generación'},
3 {'marca': 'Sega', 'modelo':'Master System', 'generación': '3ª Generación'},
4 {'marca': 'Sony', 'modelo':'PlayStation', 'generación': '5ª Generación'},
5 {'marca': 'Nintendo', 'modelo':'Gamecube', 'generación': '6ª Generación'}
6]
7
8# Se añaden la condición después del bucle:
9consolas = [consola['modelo'] for consola in lista_consolas if consola['marca'] == 'Sega']
10
11print(consolas)
Con un bucle for el resultado sería:
1consolas = []
2for consola in lista_consolas:
3 if consola['marca'] == 'Sega':
4 consolas.append(consola['modelo'])
Nota
Hay que tener en cuenta que el primer dato es solo el resultado de un bucle for, teniendo eso en cuenta se pueden hacer muchos tipos de operaciones.
Tipos de datos avanzados#
Listas#
1lista = ["cadena", 20, 18.27, False, ["otra cadena", 23, 18.77]]
2
3# asignación:
4lista[3] = "Morcilla"
5
6# impresión:
7print(lista[3])
Tuplas#
1tupla = ("cadena", 20, 18.27, False, ["otra cadena", 23, 18.77])
2
3# impresión
4print(tupla[2])
Atención
Las tuplas son inmutables por lo tanto no se pueden asignar valores
Diccionarios#
1operadores = [
2 {"suma": "+"},
3 {"resta": "-"},
4 {"multiplicación": "*"},
5 {"división": "/"},
6 {"resto": "%"},
7 {"potencia": "**"}
8]
9
10# ejemplo recorrido en listado de diccionarios:
11for operador in operadores:
12 for key, value in operador.items():
13 print("{}: {}".format(key, value))
14
15# asignación:
16operadores[0]["suma"] = "Sumar"
17
18# impresión:
19print(operadores[0]["suma"])
Control de errores#
1try:
2 print(nombre)
3except NameError:
4 print('No has escrito un nombre')
Programación modular#
Funciones#
Procedimienos:
1def saludar():
2 print("Hola persona")
3
4saludar()
funciones:
1def saludar():
2 return "Hola persona"
3
4print(saludar())
uso de parámetros:
1def saludar(nombre):
2 return "Hola {}".format(nombre)
3
4print(saludar("Antonio"))
Funciones anónimas:
1# lambda recibe uno o varios parámetros y hace un return directamente de forma anonima:
2sumar = lambda a,b,c: a+b+c
3
4print(sumar(10,13,18))
Ámbito global:
1nombre = "Alberto"
2
3def saludar():
4 return "¿Qué tal {}?".format(nombre)
5
6print(saludar())
Nota
Las variables en Python son por lo general de ámbito global
Programación orientada a objetos#
El ámbito de atributos y métodos de una clase en Python son globales.
Clases y objetos#
Estructura clase:
1class Videoconsola():
2 # atributos:
3 modelo = "Mega Drive"
4 marca = "Sega"
5
6 # los métodos reciben siempre self para hacer uso de los atributos de la clase:
7 def descripcion(self):
8 print("Es una {} {}".format(self.marca, self.modelo))
9
10
11# crear objeto:
12megaDrive = Videoconsola()
13
14# recuperar atributo:
15print(megaDrive.marca)
16
17# recuperar métodos:
18megaDrive.descripcion()
Constructor:
1class Videoconsola():
2 # atributos:
3 modelo = "Mega Drive"
4 marca = "Sega"
5
6 # El constructor recibe self y los parámetros que se pasan por el constructor:
7 def __init__(self, modelo, marca):
8 self.modelo = modelo
9 self.marca = marca
10
11 def descripcion(self):
12 print("Es una {} {}".format(self.marca, self.modelo))
13
14
15# crear objeto y pasar parámetros al constructor:
16megaDrive = Videoconsola("MegaDrive", "Sega")
17
18print(megaDrive.marca)
19
20megaDrive.descripcion()
Get y Set:
1class Persona:
2 def __init__(self, nombre, apellido, edad, dni):
3 self.nombre = nombre
4 self.apellido = apellido
5 self.edad = edad
6 # para atributos y métodos privados añadimos _ antes de forma simbólica:
7 self._dni = dni
8
9 # para evitar recuperar el atributo dni usamos el siguiente decorador que lo encapsula:
10 @property # Este sería el get
11 def dni(self):
12 return self._dni
13
14 @dni.setter # y este el set
15 def dni(self, dni):
16 self._dni = dni
17
18 def saludar(self):
19 print("Hola, me llamo {} {} y tengo {} años".format(self.nombre, self.apellido, self.edad))
20
21
22pedro = Persona("Pedro", "Martinez Sal", 37, "323223112V")
23pedro.saludar()
24
25# Uso de get:
26print("Mi DNI es: " + pedro.dni)
27
28# Uso de set:
29pedro.dni = "75753233X"
30print("Nuevo DNI: " + pedro.dni)
Herencia:
1class Persona():
2
3 def __init__(self, nombre, genero):
4 self.nombre = nombre
5 self.genero = genero
6
7 def datos(self):
8 print("Su nombre es {} y su género es.".format(self.nombre, self.genero))
9
10
11class Luis(Persona):
12 def __init__(self, nombre, genero, peso, estatura):
13 # para los atributos del padre cargamos el superconstructor y le pasamos los atributos del padre:
14 super().__init__(nombre, genero)
15 self.peso = peso
16 self.estatura = estatura
17
18 # Podemos sobrecargar el método para que imprima más atributos:
19 def datos(self):
20 print("Su nombre es {}, su género {}, pesa {} kilos y mide {}.".format(self.nombre, self.genero, self.peso, self.estatura))
21
22# Objeto creado con padre y uso de metodo datos:
23pedro = Persona("Pedro", "Masculino")
24pedro.datos()
25
26# Objeto creado con hijo y uso de metodo datos:
27luis = Luis("Luis", "Masculino", 90, 1.75)
28luis.datos()
Nota
Se puede hacer herencia múltiple pasándole a la clase hija varias clases padres por parámetro y esta podrá trabajar con todos sus atributos y métodos. Ej: class Luis(Persona, Profesion):
Clases abstractas#
Es posible trabajar con clases abstactas gracias a la librería abc
1# se importa la librería para abstracciones:
2from abc import ABC, abstractmethod
3
4# se le indica a la clase que es abstracta con abc:
5class Videoconsola(ABC):
6 modelo = "Super Nintendo"
7 marca = ""
8
9 def __init__(self, modelo, marca):
10 self.modelo = modelo
11 self.marca = marca
12
13 print("Se ha creado el objeto")
14
15 def juegos():
16 print("La consola dispone de alrededor de 700 títulos")
17
18
19 # las funciones abstractas se deben usar obligatoriamente en la clase hija:
20 # Utilizan un decorador de abc:
21 @abstractmethod
22 def precio():
23 """ Texto convencional: este método muestra el precio """
24 pass
25
26# clase a partir de clase abstracta:
27class SuperNintendo(Videoconsola):
28 def __init__(self):
29 self.modelo = "SNES"
30 self.marca = "Nintendo"
31
32
33 def precio(self):
34 print("La consola cuesta 200 €")
35
36
37
38# uso de clase hija:
39superNintendo = SuperNintendo()
40print(superNintendo.modelo)
41
42superNintendo.precio()
43
44# Desestructuración de métodos:
45Videoconsola.juegos()
Interfaces#
Las interfaces como tales no existen en python pero hay un modo de trabajar de forma similar
1class VideoconsolaInterface():
2 # En una supuesta interfaz creamos los métodos y le pasamos el valor pass para dejarlos vacíos:
3 def descripcion():
4 """ Muestra una descripción de la consola """
5 pass
6
7
8class NeoGeo(VideoconsolaInterface):
9 def __init__(self, modelo, marca, precio):
10 self.modelo = modelo
11 self.marca = marca
12 self.precio = precio
13 print(self.precio)
14
15 def descripcion(self):
16 print("Es la consola de {} {}".format(self.modelo, self.marca))
17
18
19neoGeo = NeoGeo("Neo Geo Pocket", "SNK", "149.99")
20neoGeo.descripcion()
Método «__str__»#
El método __str__() retorna una cadena al imprimir el objeto que se genera:
1class Consola:
2
3 def __init__(self, marca, modelo):
4 self.marca = marca
5 self.modelo = modelo
6
7 # el método __str__ define una cadena que retorna al imprmir:
8 def __str__(self):
9 return "Es una videoconsola {} {}.".format(self.marca, self.modelo)
10
11playstation = Consola("Sony", "PlayStation")
12
13# Al imprimir el valor devolverá la cadena asignada en __str__:
14print(playstation)
Importar y exportar#
Módulos y paquetes#
Podemos crear nuestros propios módulos en python para cortar partes del código específicas:
Lo primero es crear un nuevo archivo.py y guardar ahí por ejemplo una clase.
Luego creamos un segundo archivo que será el principal.py y para importarlo basta con escribir
import archivo
al comienzo del proyecto.
Si lo que queremos es guardar el módulo en una carpeta entonces estamos hablando de un Paquete:
Los paquetes son archivos.py que guardamos en una carpeta.
Dentro de esa carpeta creamos siempre un archivo llamado
__init__.py
para que el interprete lo considere un paquete.Luego en el archivo principal.py lo importamos con la línea
from carpeta import archivo
Y para poner un alias a un paquete o módulo de python ya sea estandar o personalizado utilizamos as
:
from carpeta import archivo as traductor