Add exercises 18
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
parent
58aac99650
commit
f391b1b42a
110
30-days-of-python/18_Expresiones_regulares/01_regex.py
Normal file
110
30-days-of-python/18_Expresiones_regulares/01_regex.py
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
"""
|
||||||
|
01_regex.py
|
||||||
|
"""
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
# Ejercicios: Nivel 1
|
||||||
|
|
||||||
|
# 1. ¿Cuál es la palabra más frecuente en el siguiente párrafo?
|
||||||
|
|
||||||
|
paragraph = 'I love teaching. If you do not love teaching what else can you love. I love Python if you do not love something which can give you all the capabilities to develop an application what else can you love.'
|
||||||
|
|
||||||
|
# Convertimos el párrafo a minúsculas
|
||||||
|
paragraph = paragraph.lower()
|
||||||
|
|
||||||
|
# Separamos el párrafo en palabras
|
||||||
|
words = paragraph.split()
|
||||||
|
|
||||||
|
# Creamos un diccionario para contar la frecuencia de cada palabra
|
||||||
|
word_freq = {}
|
||||||
|
for word in words:
|
||||||
|
if word in word_freq:
|
||||||
|
word_freq[word] += 1
|
||||||
|
else:
|
||||||
|
word_freq[word] = 1
|
||||||
|
|
||||||
|
# Encontramos la palabra más frecuente
|
||||||
|
most_freq_word = max(word_freq, key=word_freq.get)
|
||||||
|
|
||||||
|
print("La palabra más frecuente es:", most_freq_word)
|
||||||
|
|
||||||
|
|
||||||
|
# 2. La posición de algunas partículas
|
||||||
|
# en el eje x horizontal son - 12, -4, -3 y - 1
|
||||||
|
# en la dirección negativa,
|
||||||
|
# 0 en el origen,
|
||||||
|
# 4 y 8 en la dirección positiva.
|
||||||
|
# Extrae estos números de todo el texto
|
||||||
|
# y encuentra la distancia entre
|
||||||
|
# las dos partículas más lejanas.
|
||||||
|
|
||||||
|
|
||||||
|
text = "La posición de algunas partículas en el eje x horizontal son -12, -4, -3 y -1 en la dirección negativa, 0 en el origen, 4 y 8 en la dirección positiva."
|
||||||
|
|
||||||
|
# Extraemos los números del texto
|
||||||
|
numbers = re.findall(r'-?\d+', text)
|
||||||
|
|
||||||
|
# Convertimos los números a enteros
|
||||||
|
numbers = [int(num) for num in numbers]
|
||||||
|
|
||||||
|
# Encontramos la distancia entre las dos partículas más lejanas
|
||||||
|
distance = max(numbers) - min(numbers)
|
||||||
|
|
||||||
|
print("La distancia entre las dos partículas más lejanas es:", distance)
|
||||||
|
|
||||||
|
# Ejercicios: Nivel 2
|
||||||
|
|
||||||
|
# 1. Escribe un patrón que identifique
|
||||||
|
# si una cadena es una variable válida en Python.
|
||||||
|
|
||||||
|
# Definimos una función que verifica si una cadena es una variable válida en Python
|
||||||
|
|
||||||
|
|
||||||
|
def is_valid_variable(variable):
|
||||||
|
pattern = r'^[a-zA-Z_]\w*$'
|
||||||
|
|
||||||
|
if bool(re.match(pattern, variable)):
|
||||||
|
return f"La variable {variable} es válida"
|
||||||
|
else:
|
||||||
|
return f"La variable {variable} no es válida"
|
||||||
|
|
||||||
|
|
||||||
|
# Ejemplos de variables válidas e inválidas
|
||||||
|
valid_variables = ['my_var', 'myVar', '_my_var', 'myVar123', 'my_var_123']
|
||||||
|
invalid_variables = ['123myvar', 'my-var', 'my var', 'my$var']
|
||||||
|
|
||||||
|
# Verificamos si las variables son válidas o no
|
||||||
|
for variable in valid_variables:
|
||||||
|
print(variable, is_valid_variable(variable))
|
||||||
|
|
||||||
|
for variable in invalid_variables:
|
||||||
|
print(variable, is_valid_variable(variable))
|
||||||
|
|
||||||
|
# Ejercicios: Nivel 3
|
||||||
|
|
||||||
|
# 1. Limpia el siguiente texto. Después de limpiarlo, cuenta las tres palabras más frecuentes en la cadena.
|
||||||
|
|
||||||
|
sentence = '''%I $am@% a %tea@cher%, &and& I lo%#ve %tea@ching%;. There $is nothing; &as& mo@re rewarding as educa@ting &and& @emp%o@wering peo@ple. ;I found tea@ching m%o@re interesting tha@n any other %jo@bs. %Do@es thi%s mo@tivate yo@u to be a tea@cher!?'''
|
||||||
|
|
||||||
|
# Limpiamos el texto
|
||||||
|
clean_sentence = re.sub(r'[^a-zA-Z\s]', '', sentence)
|
||||||
|
|
||||||
|
# Convertimos el texto a minúsculas
|
||||||
|
clean_sentence = clean_sentence.lower()
|
||||||
|
|
||||||
|
# Separamos el texto en palabras
|
||||||
|
words = clean_sentence.split()
|
||||||
|
|
||||||
|
# Creamos un diccionario para contar la frecuencia de cada palabra
|
||||||
|
word_freq = {}
|
||||||
|
for word in words:
|
||||||
|
if word in word_freq:
|
||||||
|
word_freq[word] += 1
|
||||||
|
else:
|
||||||
|
word_freq[word] = 1
|
||||||
|
|
||||||
|
# Encontramos las tres palabras más frecuentes
|
||||||
|
most_freq_words = sorted(word_freq, key=word_freq.get, reverse=True)[:3]
|
||||||
|
|
||||||
|
print("Las tres palabras más frecuentes son:", most_freq_words)
|
@ -69,5 +69,6 @@ print(clean_text(sentence));
|
|||||||
I am a teacher and I love teaching There is nothing as more rewarding as educating and empowering people I found teaching more interesting than any other jobs Does this motivate you to be a teacher
|
I am a teacher and I love teaching There is nothing as more rewarding as educating and empowering people I found teaching more interesting than any other jobs Does this motivate you to be a teacher
|
||||||
print(most_frequent_words(cleaned_text)) # [(3, 'I'), (2, 'teaching'), (2, 'teacher')]
|
print(most_frequent_words(cleaned_text)) # [(3, 'I'), (2, 'teaching'), (2, 'teacher')]
|
||||||
```
|
```
|
||||||
|
[Solución](01_regex.py)
|
||||||
|
|
||||||
[<< Day 17](../17_Manejo_de_excepciones/README.md) | [Day 19 >>](../19_Manipulación_de_archivos/README.md)
|
[<< Day 17](../17_Manejo_de_excepciones/README.md) | [Day 19 >>](../19_Manipulación_de_archivos/README.md)
|
||||||
|
Loading…
Reference in New Issue
Block a user