Skip to content

Commit ceb150c

Browse files
authored
Merge pull request mouredev#7091 from mrodara/mrodara/main
#16-Python
2 parents a8d456d + 472d0e5 commit ceb150c

File tree

5 files changed

+466
-0
lines changed

5 files changed

+466
-0
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
############################################ EXPRESIONES REGULARES ############################################################
2+
3+
import re # Módulo para tratamiento de expresiones regulares
4+
5+
my_string = "El señor Daniel tiene 3 hijos y 5 esposas, además ha sido agraciado con 1000 €"
6+
my_other_string = "A 4 vecinos de la comunidad en el bloque nro. 2 le han tocado 100.000 $ de la lotería"
7+
8+
def extract_numbers_from_text(text: str) -> list:
9+
10+
pattern = r"\d+" # Busca cualquier número entero
11+
12+
return re.findall(pattern=pattern, string=text)
13+
14+
str_list = [my_string, my_other_string]
15+
16+
for phrase in str_list:
17+
matches = extract_numbers_from_text(text=phrase)
18+
19+
if matches:
20+
print(f"En la frase '{phrase}' se encontraron los siguientes números: {matches}")
21+
22+
23+
############################################## EXTRA ###################################################################################
24+
25+
def validate_email(email: str) -> bool:
26+
27+
pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-z]{2,}$"
28+
29+
if re.match(pattern=pattern, string=email):
30+
return True
31+
else:
32+
return False
33+
34+
my_fake_email = "root.srisemipresencial.com"
35+
my_trusted_email = "root@srisemipresencial.com"
36+
37+
print(validate_email(my_fake_email))
38+
print(validate_email(my_trusted_email))
39+
40+
def validate_phone_number(phone: str) -> bool:
41+
42+
pattern = r"^\+?[1-9]\d{1,3}[-.\s]?\d{1,4}[-.\s]?\d{3,4}[-.\s]?\d{3,4}$"
43+
44+
if re.match(pattern=pattern, string=phone):
45+
return True
46+
else:
47+
return False
48+
49+
my_fake_phone = "+1234567890"
50+
my_trusted_phone = "+1 234 567 890"
51+
my_trusted_phone_2 = "+123456789"
52+
53+
54+
print(validate_phone_number(my_fake_phone))
55+
print(validate_phone_number(my_trusted_phone))
56+
print(validate_phone_number(my_trusted_phone_2))
57+
58+
def validate_url(url: str) -> bool:
59+
60+
pattern = r"^(https?:\/\/)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}(:\d+)?(\/[^\s]*)?$"
61+
62+
if re.match(pattern=pattern, string=url):
63+
return True
64+
else:
65+
return False
66+
67+
my_fake_url = "http://www.google"
68+
my_trusted_url = "https://www.google.com"
69+
my_trusted_url_2 = "www.google.com"
70+
my_trusted_url_3 = "http://www.google.com"
71+
72+
print(validate_url(my_fake_url))
73+
print(validate_url(my_trusted_url))
74+
############################################## FIN EXTRA ###################################################################################
75+
76+
77+
78+
79+
############################################ FIN EXPRESIONES REGULARES ############################################################
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
################################## ITERACIONES ###################################################
2+
3+
# EJERCICIO 3 MANERAS DIFERENTES DE IMPRIMIR SECUENCIA 1 AL 10
4+
5+
# 1. Usando un for
6+
7+
for i in range(1,11):
8+
print(i," ", end="")
9+
10+
# 2. Recorriendo un lista wildcard
11+
lista = [1,2,3,4,5,6,7,8,9,10]
12+
13+
print(lista[:])
14+
15+
# También podemos crear la lista por comprenhension
16+
print (* [i for i in range(1,11)])
17+
18+
# 3. Usando un bucle While
19+
number = 1
20+
21+
while number <= 10:
22+
print(number, " ", end="")
23+
number += 1
24+
25+
26+
################################## EXTRA ITERACIONES ###################################################
27+
28+
# Podemos usar recursividad para iterar números
29+
30+
def recursive_iteration(i: int = 1):
31+
if i <= 10:
32+
print(i, " ", end="")
33+
recursive_iteration(i + 1)
34+
35+
recursive_iteration()
36+
37+
# Antes hemos usado listas pero también son iterables las tuplas y los diccionarios
38+
39+
tupla = (1,2,3,4,5,6,7,8,9,10)
40+
41+
for num in tupla:
42+
print(num, " ", end="")
43+
44+
my_dict = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6, 'g':7, 'h':8, 'i':9, 'j':10}
45+
46+
# En el caso de los diccionarios podemos iterar las claves, los valores u ambos a la vez
47+
48+
for key in my_dict.keys():
49+
print(key, " ", end="")
50+
51+
for value in my_dict.values():
52+
print(value, " ", end="")
53+
54+
for key,value in my_dict.items():
55+
print(f'Clave: {key}, Valor: {value}')
56+
57+
# Cadenas de caracteres también son iterables.
58+
59+
my_str = "Lleva la tarara un vestido blanco lleno de cascabeles"
60+
61+
for char in my_str:
62+
print(char, " ", end="")
63+
64+
# De la misma cadena también podemos iterar por las palabras que la conforman
65+
for word in my_str.split():
66+
if word != " ":
67+
print(word, " ", end="")
68+
69+
# En listas, tuplas y cadenas de caracteres podemos iterar en orden inverso
70+
71+
print(tupla[::-1])
72+
print(my_str[::-1])
73+
print(my_str.split()[::-1])
74+
75+
################################## FIN EXTRA ITERACIONES ###################################################
76+
77+
################################## FIN ITERACIONES ###################################################
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
############################################### CONJUNTOS EN PYTHON ###################################################################
2+
3+
# Para la definición de un conjunto de datos usaremos {} o la función set()
4+
# Los conjuntos no pueden tener elementos repetidos y no es necesario que estén ordenados
5+
# Los conjuntos no pueden tener elementos que no sean inmutables (no pueden ser modificados)
6+
7+
c1 = {1,2,3,7,5}
8+
9+
# Agregar un elemento
10+
c1.add(6)
11+
12+
print(c1)
13+
14+
# Eliminar un elemento
15+
c1.remove(7) # Da error si no existe el elemento dentro del conjunto
16+
print(c1)
17+
18+
# Podemos eliminar y no generar error si el elemento no existe con discard
19+
c1.discard(7)
20+
21+
# Vaciar completamente el conjunto con clear
22+
c1.clear()
23+
24+
# Operaciones matemáticas de conjutos (union | intersección & diferencia - diferencia simétrica ^)
25+
c1 = {1,2,3,7,5}
26+
c2 = {1,2,3,7,8}
27+
28+
print(f"Unión: {c1 | c2}")
29+
print(f"Intersección: {c1 & c2}" )
30+
print(f"Diferencia: {c1 - c2}")
31+
print(f"Diferencia simétrica: {c1 ^ c2}")
32+
33+
34+
# Ejercicio
35+
36+
c2 = {3,5,2,1}
37+
print(c2)
38+
39+
c2.add(7) # Añade un elemento
40+
print(c2)
41+
42+
'''
43+
En Python, los conjuntos (set) son colecciones desordenadas, por lo que no tienen un concepto de "inicio" o "final".
44+
Los elementos no se almacenan en un orden específico. Por esta razón,
45+
no podemos "añadir un elemento al inicio" como lo haríamos con una lista.
46+
47+
Podemos convertir el conjunto en lista, añadir, eliminar etc en las posiciones que queramos y posteriormente convertila
48+
a un conjunto
49+
'''
50+
51+
c2_list = list(c2)
52+
53+
print(type(c2_list))
54+
print(len(c2_list))
55+
56+
c2_list.extend([i for i in range(11,21)]) # Añadimos varios elementos en bloque a la lista
57+
c2_list[5] = 1000 # Actualizamos el valor en una posición concreta
58+
c2 = set(c2_list) # Acabamos de añadir varios elementos en bloque a un conjunto
59+
60+
print(c2)
61+
62+
# Si queremos eliminar uno o varios elementos concretos de un conjunto tendríamos que operar de la misma forma
63+
c2_list = list(c2)
64+
65+
c2_list.pop() # Para eliminar un elemento
66+
c2_list.pop(0) # Para eliminar un elemento en una posición concreta
67+
c2_list.remove(12) # Para eliminar un elemento concreto
68+
69+
c2 = set(c2_list)
70+
print(c2)
71+
72+
# Comprobaciones de pertenencia
73+
print(1 in c2)
74+
print(1000 in c2)
75+
print(12 in c2)
76+
77+
# Por último limpiar todo el conjunto
78+
c2.clear()
79+
80+
print(c2)
81+
82+
83+
84+
############################################### EJERCICIO EXTRA ###################################################################
85+
# Mostrar operaciones con conjuntos:
86+
l1 = [i for i in range(1, 100)]
87+
l2 = [i for i in range(50, 150)]
88+
c1 = set(l1)
89+
c2 = set(l2)
90+
91+
print(c1)
92+
print(c2)
93+
94+
print(f"Union: {c1.union(c2)}")
95+
print(f"Intersección: {c1.intersection(c2)}")
96+
print(f"Diferencia: {c1.difference(c2)}")
97+
print(f"Diferencia simétrica: {c1.symmetric_difference(c2)}")
98+
99+
100+
############################################### FIN EJERCICIO EXTRA ###################################################################
101+
102+
############################################### FIN CONJUNTOS EN PYTHON ###################################################################
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
### ENUMERACIONES
2+
'''
3+
Las enumeraciones (enums) son un conjunto de nombres simbólicos (miembros) asignados a valores únicos.
4+
En Python, el módulo estándar enum permite trabajar con enumeraciones de manera sencilla,
5+
facilitando la organización y manipulación de conjuntos de valores relacionados.
6+
'''
7+
from enum import Enum
8+
9+
class Week(Enum):
10+
LUNES = 1
11+
MARTES = 2
12+
MIERCOLES = 3
13+
JUEVES = 4
14+
VIERNES = 5
15+
SABADO = 6
16+
DOMINGO = 7
17+
18+
print(Week.LUNES.name)
19+
print(Week.LUNES.value)
20+
21+
def get_week_day(number: int = 1):
22+
if number < 1 or number > 7:
23+
print("Error!!!")
24+
return None
25+
26+
return Week(number).name
27+
28+
print(get_week_day(2))
29+
print(get_week_day(4))
30+
print(get_week_day(7))
31+
32+
### EJERCICIO EXTRA
33+
34+
class Estado(Enum):
35+
PENDIENTE = 1
36+
ENVIADO = 2
37+
ENTREGADO = 3
38+
CANCELADO = 4
39+
40+
class Pedido:
41+
def __init__(self, id_pedido, estado):
42+
self.__id_pedido = id_pedido
43+
self.__estado = estado
44+
45+
@property
46+
def id_pedido(self):
47+
return self.__id_pedido
48+
49+
@id_pedido.setter
50+
def id_pedido(self, id: int):
51+
self.__id_pedido = id
52+
53+
@property
54+
def estado(self):
55+
return self.__estado
56+
57+
def cambiar_estado(self, estado: Estado):
58+
if self.__estado.value == 1 and estado.value == 3:
59+
print("Error: El estado no puede cambiar de pendiente a entregado hasta que no se haya enviado")
60+
elif self.__estado.value == 3 and estado.value == 4:
61+
print("Error: El estado no puede cambiar de entregado a cancelado")
62+
else:
63+
print(f"Cambiando el pedido {self.__id_pedido} de {self.__estado.name} a {estado.name}")
64+
self.__estado = estado
65+
66+
p1 = Pedido(1, Estado.PENDIENTE)
67+
p2 = Pedido(2, Estado.ENVIADO)
68+
p3 = Pedido(3, Estado.ENTREGADO)
69+
70+
print(f"Id: {p1.id_pedido}, Estado: {p1.estado.name}")
71+
print(f"Id: {p2.id_pedido}, Estado: {p2.estado.name}")
72+
print(f"Id: {p3.id_pedido}, Estado: {p3.estado.name}")
73+
74+
# P1 pasa a estado enviado
75+
p1.cambiar_estado(Estado.ENVIADO)
76+
p3.cambiar_estado(Estado.CANCELADO) # Este cambio no se puede realizar
77+
print(p3.estado.name)
78+
79+
### FIN EJERCICIO EXTRA
80+
81+
82+
### FIN ENUMERACIONES

0 commit comments

Comments
 (0)