From f391b1b42a71535210589d089c28a6127f9a5aa0 Mon Sep 17 00:00:00 2001 From: Manuel Vergara Date: Sat, 30 Sep 2023 21:38:24 +0200 Subject: [PATCH] Add exercises 18 Signed-off-by: Manuel Vergara --- .../18_Expresiones_regulares/01_regex.py | 110 ++++++++++++++++++ .../18_Expresiones_regulares/README.md | 1 + 2 files changed, 111 insertions(+) create mode 100644 30-days-of-python/18_Expresiones_regulares/01_regex.py diff --git a/30-days-of-python/18_Expresiones_regulares/01_regex.py b/30-days-of-python/18_Expresiones_regulares/01_regex.py new file mode 100644 index 0000000..73b827f --- /dev/null +++ b/30-days-of-python/18_Expresiones_regulares/01_regex.py @@ -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) diff --git a/30-days-of-python/18_Expresiones_regulares/README.md b/30-days-of-python/18_Expresiones_regulares/README.md index a748e7a..99ade05 100644 --- a/30-days-of-python/18_Expresiones_regulares/README.md +++ b/30-days-of-python/18_Expresiones_regulares/README.md @@ -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 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)