sábado, 1 de julio de 2023

50+ Desafios de Python para principiantes Parte 4

En este artículo encontrarás desafíos de diferentes niveles de dificultad, desde problemas básicos para principiantes hasta desafíos avanzados para los programadores más experimentados. Cada desafío está cuidadosamente diseñado para poner a prueba tu conocimiento de Python y tu capacidad para pensar de manera lógica y encontrar soluciones elegantes.

Los siguientes desafíos se resuelven mediante comandos básicos de programación en Python, estos se hace con fines didácticos, ya que en algunos caso la solución del desafió puede ser solucionada con funciones existentes. 

 Lo mejor que puede hacer es ejecutar cada código e intentar comprender cómo funciona todo junto. No tenga miedo de desarmarlo y agregar nuevas funciones. Así es como aprendes.

Desafío 32: Validador de contraseña Escriba una función que le pida al usuario que ingrese una contraseña. Una contraseña válida debe tener al menos una letra mayúscula, una letra minúscula y un número. No debe tener menos de 8 caracteres. Cuando el usuario ingresa una contraseña, la función debe verificar si la contraseña es válida. si la contraseña es válido, la función debe devolver la contraseña válida. Si la contraseña no es válida, la función debe informar al usuario de los errores en la contraseña y pedirle que ingrese otra contraseña. El código solo debe detenerse una vez que el usuario ingrese una contraseña válida. (use el ciclo while).

Solución Propuesta: En este código, usamos el ciclo while para garantizar que el código se ejecute hasta que se ingrese una contraseña válida. Todos los errores en la contraseña de entrada se agregan a la lista de errores. La función any() comprueba si alguno de los caracteres de la contraseña cumple una condición determinada. Si una condición no se cumple, se genera un error.

 

 


Desafío adicional: correos electrónicos de correo electrónico válidos = ['ben@mail.com', 'john@mail.cm', 'kenny@gmail.com', '@list.com']

Escriba una función llamada email_validator que tome una lista de correos electrónicos y verifique si los correos electrónicos son válidos. La función solo devuelve correos electrónicos válidos. Una dirección de correo electrónico válida tendrá lo siguiente: el símbolo @ (si el signo @ está al comienzo del nombre, el correo electrónico no es válido). Si hay más de un signo @, el correo electrónico no es válido. Todos los correos electrónicos válidos deben terminar con un punto com (.com); de lo contrario, el correo electrónico no es válido. Por ejemplo, la lista de correos electrónicos anterior debería generar los siguientes correos electrónicos válidos: ['ben@mail.com', 'kenny@gmail.com']

Solución Propuesta: Si ningún correo electrónico en la lista es válido, la función debería devolver "todos los correos electrónicos no son válidos".

 


Desafío 33: Intersección de listas Escribe una función llamada inter_sección que tome dos listas y encuentre la intersección (los elementos que están presentes en ambas listas). La función debe devolver una tupla de intersecciones. Use la comprensión de listas en su solución. Utilice las listas a continuación. Su función debería devolver (30, 65, 80).

lista1 = [20, 30, 60, 65, 75, 80, 85]

lista2 = [ 42, 30, 80, 65, 68, 88, 95]

Solución Propuesta: Usando un bucle for, buscamos elementos que estén presentes en ambas listas. La lista de comprensión devolverá una lista de elementos que están presentes en list1 y list2.

 

 Desafío adicional: conjunto o lista Desea implementar un código que busque un número en un rango. Debe tomar la decisión de almacenar el número en un conjunto o en una lista. Su decisión estará basada en el tiempo. Tienes que elegir un tipo de datos que se ejecute más rápido. Tiene un rango y puede almacenarlo en un conjunto o en una lista, según cuál se ejecute más rápido cuando busque un número en el rango. Vea a continuación: a = range(10000000) x = set(a) y = list(a) Digamos que está buscando el número 9999999 en el rango anterior. Busque este número en la lista "x" y el conjunto "y". Su desafío es encontrar qué código se ejecuta más rápido. Seleccionarás el que se ejecuta más rápido entre listas y conjuntos. Ejecute las dos búsquedas y cronometrelas.

Solución Propuesta: Para probar la velocidad del código, vamos a usar la función timeit para ambos códigos. Creamos una variable llamada speed_test que tiene el código. Luego pasamos esta variable a la función timeit y establecemos el número de ejecuciones en 3.

 


 De los resultados, podemos concluir que los conjuntos se ejecutan un poco más rápido que las listas.

 

Desafío 34: Solo dígitos En este desafío, copie el texto a continuación y guárdelo como un archivo CSV. Guárdelo en la misma carpeta que su archivo de Python. Guárdelo como python.csv. Escriba una función llamada just_digits que lea el texto del archivo CSV y devuelva solo elementos de dígitos del archivo. Su función debería devolver 1991, 2, 200, 3, 2008 como una lista de cadenas.

“Python fue lanzado en 1991 por primera vez. Python 2 se lanzó en 2000 e introdujo nuevas funciones, como la comprensión de listas y un sistema de recolección de basura de detección de ciclos (además del conteo de referencias). Python 3 se lanzó en 2008 y fue una revisión importante del lenguaje que no es completamente compatible con versiones anteriores”. Fuente: Wikipedia

Solución Propuesta: Al abrir archivos, es una buena práctica abrirlos con una instrucción with. Esto significa que no tiene que cerrar el archivo al final de la operación, ya que la instrucción with cerrará automáticamente el archivo. En este código, abrimos el archivo en el modo de lectura. Usamos el método split() para dividir las palabras del texto en cadenas. De forma predeterminada, el método de división divide el texto en los espacios en blanco. El método isdigit () verifica qué elementos de cadena no son numéricos. Estos elementos no numéricos se agregan a la variable list1.

 

 

Desafío 35: Pangram Escriba una función llamada check_pangram que tome una cadena y verifique si es un pangram. Un pangrama es una oración que contiene todas las letras del alfabeto. Si es un pangrama, la función debería devolver True, de lo contrario, debería devolver False . La siguiente oración es un pangrama, por lo que debería devolver True: 'el rápido zorro marrón salta sobre un perro perezoso'

Solución Propuesta: Usamos el módulo de cadena para obtener las letras del alfabeto en minúsculas. Luego eliminamos los espacios en blanco de nuestra cadena usando el método replace(). Usamos el ciclo for para recorrer la cadena, eliminar duplicados y agregar los elementos de la cadena a list1. Ordenamos los elementos de list1 en orden alfabético usando el método sort(), y luego usamos el método join() para unir los elementos de la cadena. Luego comparamos la oración ordenada con el alfabeto. Si la variable de oración tiene todos los elementos de la variable alfabética, el código devolverá True.

 


Desafío extra: encontrar mi posición Escriba una función llamada find_index que tome dos argumentos; una lista de números enteros y un número entero. La función debe devolver los índices del entero en la lista. Si el número entero no está en la lista, la función debería convertir todos los números de la lista en el número entero dado. Por ejemplo, si la lista es [1, 2, 4, 6, 7, 7] y el número entero es 7, su código debería devolver [4, 5] como índices de 7 en la lista. Si la lista es [1, 2, 4, 6, 7, 7] y el número entero es 8, su código debería devolver [8, 8, 8, 8, 8, 8] porque 8 no está en la lista.

Solución Propuesta: En este desafío, sería fácil usar la función enumerar. Dado que estamos buscando el índice de un número, la función de enumeración devolverá el índice de todos los números de la lista. Usamos la declaración condicional (si j == n) para devolver solo índices del número dado. Si el número no está en la lista, convertimos todos los números de la lista al número dado.

 


Desafío 36: Count String Escriba una función llamada count que tome un argumento de una cadena y devuelva un diccionario de cuántas veces aparece cada elemento en la cadena. Por ejemplo, 'hola' debería devolver: {'h':1,'e': 1,'l':2, 'o':1}.

Solución Propuesta: Este código crea un diccionario a partir de una cadena. El código usa un bucle for anidado. El primer bucle for devuelve los elementos de índice de la cadena. El segundo bucle for también devuelve el índice. Si el índice del elemento del ciclo uno es igual al del ciclo 2, se agrega 1 a la variable de conteo. La instrucción if se usa para actualizar el diccionario, d.

 

 

Desafío 37: Contar las Vocales Crear una función llamada contar_las_vocales . La función toma un argumento, una cadena, y devuelve el número de vocales en la cadena. Por ejemplo, "hola" debe devolver dos (2) vocales. Si una vocal aparece en una cadena más de una vez, debe contarse como una. Por ejemplo, " saas " debería devolver una (1) vocal. Tu código debe contar las vocales mayúsculas y minúsculas.

Solución Propuesta: Para este desafío, creamos una cadena de vocales. El código verifica si las letras en el argumento de cadena están en la cadena de vocales. Si la letra está en la cadena de vocales, se agrega a la lista de vocales. Luego usamos la función len () para contar el número de elementos en la lista de vocales.

 


Desafío 38: Adivina un número Escribe una función llamada adivina_un_número . La función debería pedirle al usuario que adivine un número generado aleatoriamente. Si el usuario adivina un número más alto, el código debería decirle que la suposición es demasiado alta; si el usuario adivina un número bajo, el código debería decirle que su suposición es demasiado baja. El usuario debe obtener un máximo de tres (3) conjeturas. Cuando el usuario acierta, el código debería declararlo ganador. Después de tres conjeturas incorrectas, el código debería declararlos perdedores.

Solución Propuesta: Usamos el módulo aleatorio para generar un número aleatorio entre 0 y 10. Usamos el bucle while para garantizar que el código siga ejecutándose hasta que la condición se vuelva Falsa. La condición se vuelve Falsa cuando el usuario adivina el número correcto o cuando se queda sin conjeturas. El usuario obtiene un máximo de tres (3) conjeturas.

 


Desafío extra: Encuentra la lista de números que faltan = [1, 2, 3, 5, 6, 7, 9, 11, 12, 23, 14, 15, 17, 18, 19, 20, 21, 22, 24, 25, 26 , 27, 28, 31] Escriba una función llamada números_faltantes que tome una lista de secuencias de números y encuentre los números que faltan en la secuencia. La lista anterior debería devolver: [4, 8, 10, 13, 16, 29, 30]

Solución Propuesta: Hay muchas maneras de resolver este desafío. Aquí usamos la función de rango para encontrar los números que faltan en la secuencia.

 


Desafío 39: Generador de contraseñas Cree una función llamada generar_contraseña que genere cualquier longitud de contraseña para el usuario. La contraseña debe tener una combinación aleatoria de letras mayúsculas, minúsculas, números y signos de puntuación. La función debe preguntar al usuario qué tan fuerte quiere que sea la contraseña. El usuario debe elegir entre débil, fuerte o muy fuerte. Si el usuario elige "débil", la función debería generar una contraseña de 5 caracteres. Si el usuario elige "fuerte", genere una contraseña de 8 caracteres, y si elige "muy fuerte", genere una contraseña de 12 caracteres.

Solución Propuesta: Para este desafío, estamos usando dos módulos: el módulo de cadena y el módulo aleatorio. El módulo de cadena proporciona todos los caracteres que necesitamos para la contraseña. Usamos el módulo aleatorio ( random.choice ) para barajar la variable a. Le pedimos al usuario que elija la longitud de la contraseña que desea, por lo que después de mezclar los caracteres de la contraseña, la contraseña emitida es la longitud solicitada por el usuario.

 


Desafío 40: Pig Latin Escriba una función llamada translate que tome las siguientes palabras y las traduzca a Pig Latin. a = ' me encanta Python'

Estas son las reglas:

1.  Si una palabra comienza con una vocal (a, e, i , o, u) agregue 'yay' al final. Por ejemplo, 'eat' se convertirá en ' eatyay '

2.   Si una palabra comienza con algo que no sea una vocal, mueva la primera letra al final y agregue 'ay' al final. Por ejemplo, 'day' se convertirá en ' ayday '. Su código debería devolver: iyay sobreponer ythonpay

Solución Propuesta: Usando la función enumerate(), obtenemos el índice de cada letra en la cadena. El método split() convierte las palabras de la cadena en cadenas. Usamos la instrucción if para verificar si la primera letra de la palabra es una vocal. Si es una vocal, agregamos "yay" al final. Si no es así, movemos la primera letra al final y añadimos "ay".

 


Desafío 41: Solo palabras con vocales Cree una función, que tome una cadena de palabras y devuelva una lista de solo las palabras que tienen vocales.

Solución Propuesta: Note que estamos usando el bucle for anidado para encontrar las letras en las palabras. Iteramos sobre las palabras para comprobar si alguna de las letras de las palabras son vocales. Si una palabra tiene una vocal, la agregamos a la lista de vocales. En la lista de vocales, solo tenemos palabras que tienen vocales.

 


Desafío adicional: clase de autos Crea tres clases para tres marcas de autos: Ford, BMW y Tesla. Los atributos de instancia de los objetos del automóvil serán modelo, color, año, transmisión y si el automóvil es eléctrico o no (un valor booleano). Considere usar la herencia en su respuesta. Creará un objeto para cada marca de automóvil: bmw1 : modelo: x6, Color: plata, Año: 2018, Transmisión: Auto, Eléctrico: Falso tesla1: modelo: S, Color: beige, Año: 2017, Transmisión: Auto, Eléctrico : True ford1 : model: focus, Color: white, Year: 2020, Transmission: Auto, Electric: False Crearás un método de instancia llamado print_cars que podrá imprimir objetos de la clase. Por ejemplo, si llama al método en el objeto ford1 de la clase Ford, su función debería poder imprimir información del automóvil en este formato exacto: car_model = focus Color = White Year = 2020 Transmission = Auto Electric = False

Solución Propuesta: En este desafío, creamos la clase Cars. Esta clase es la clase principal de todas las clases de marcas de automóviles. Esto se llama herencia. Las clases secundarias heredan las propiedades y métodos de la clase principal. Las clases secundarias tienen "Cars" como argumento.

 

 

Desafío 42: Corrector ortoghgtfghfsdtghráfico Escribe una función llamada corrector_ortográfico . Este código le pide al usuario que ingrese una palabra, y si el usuario ingresa la ortografía incorrecta, debe sugerir la ortografía correcta preguntándole al usuario si tuvo la intención de escribir esa palabra. Si el usuario dice que no, debe pedirle que ingrese la palabra nuevamente. Si el usuario dice que sí, debe devolver la palabra correcta. Si la palabra ingresada por el usuario está escrita correctamente, la función debe devolver la palabra correcta. Utilice el módulo textblob .

Solución Propuesta: El módulo textblob se utiliza para validar la entrada del usuario. Si la palabra no está escrita correctamente, el módulo sugiere una ortografía correcta al usuario. Si el usuario acepta la palabra, se devuelve la palabra. Si el usuario no acepta la palabra, el código le pide al usuario que ingrese otra palabra. Estamos utilizando un bucle while, por lo que este código solo se romperá una vez que el usuario ingrese una palabra correcta o acepte la palabra correctamente escrita sugerida por el código.

 


Desafío adicional: Crear un despertador Cree una función llamada alarma que configure un despertador para el usuario. La función debe pedirle al usuario que ingrese la hora a la que desea que suene la alarma. El usuario debe ingresar el tiempo en horas y minutos. La función debería imprimir la hora en que sonará la alarma. Cuando sea la hora de la alarma, el código debería emitir un sonido. Utilice el módulo winsound para el sonido.

 


Desafío 43: Notas de los estudiantes Escriba una función llamada notas_estudiantes que registre las calificaciones obtenidas por los estudiantes en una prueba. La función debe pedirle al usuario que ingrese el nombre del estudiante y luego pedirle al usuario que ingrese las calificaciones obtenidas por el estudiante. La información debe almacenarse en un diccionario. El nombre es la clave, y la marca es un valor. Cuando el usuario ingresa "hecho", la función debe devolver un diccionario de los nombres y valores ingresados.

Solución Propuesta: En este código, le pedimos al usuario que ingrese el nombre del estudiante y sus calificaciones en la prueba. El código solo se rompe una vez que el usuario ingresa "hecho". Cuando eso sucede, se devuelve el diccionario. Usamos el método get ( d.get ) para agregar valores al diccionario. El método get busca la clave y luego agrega valor a esa clave.

 


Desafío 44: Guardar correos electrónicos Cree una función llamada save_emails . Esta función no acepta argumentos, pero le pide al usuario que ingrese un correo electrónico y guarda los correos electrónicos en un archivo CSV. El usuario puede ingresar tantos correos electrónicos como desee. Una vez que presionan "listo", la función guarda los correos electrónicos y cierra el archivo. Cree otra función llamada open_emails . Esta función abre y lee el contenido del archivo CSV. Cada correo electrónico requiere su propia línea. Aquí hay un ejemplo de cómo se deben guardar los correos electrónicos:

jj@gmail.com kate@yahoo.com y no así: jj@gmail.comkate@yahoo.com

Solución Propuesta: Hay dos funciones en este código. El primero agrega o escribe el correo electrónico en el archivo. Abrimos el archivo (emails.csv) en modo de adición "a" para no sobrescribir el contenido que ya está en el archivo. Si abre un archivo en modo de adición, si el archivo no existe, se creará. Usamos el carácter de escape (\n) para asegurarnos de que cada correo electrónico se agregue a una nueva línea. Como estamos usando la instrucción with, el archivo se cerrará automáticamente. La segunda función abre y lee el archivo. dado que solo estamos leyendo el archivo, abrimos el archivo en modo de lectura ("r").

 



0 comments:

Publicar un comentario