sábado, 1 de julio de 2023

50+ Desafios de Python para principiantes Parte 2

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.

Parte 3 del Artículo 

Desafío 11: ¿Son iguales? Escriba una función llamada equal_strings . La función toma dos cadenas como argumentos y las compara. Si las cadenas son iguales (si tienen los mismos caracteres y la misma longitud), debería devolver True; si no lo son, debería devolver False. Por ejemplo, "love" y " evol " deberían devolver True.

Solución Propuesta: Para comparar las dos cadenas, primero debemos ordenarlas. Usamos la función sorted() para ordenar las dos cadenas. Luego usamos el operador "==" para comparar las dos cadenas.

 


Desafío extra: Intercambiar valores Escribe una función llamada swap_values . Esta función toma una lista de números e intercambia el primer elemento con el último elemento. Por ejemplo, si pasa [2, 4, 67, 7] como parámetro, su función debería regresar. [7, 4, 67, 2].

Solución Propuesta: La manera fácil de resolver este desafío sería crear variables separadas para los números que desea intercambiar. Use el corte de lista para obtener los valores.

 


Desafío 12: Cuenta los puntos Escribe una función llamada contar_puntos . Esta función toma una cadena separada por puntos como parámetro y cuenta cuántos puntos hay en la cadena. Por ejemplo, " ayuda ". debe devolver 4 puntos y " he.lp ". debe devolver 2 puntos.

Solución Propuesta: Usamos la función split() para dividir la palabra en los puntos. Una vez que se divide la palabra, usamos la función len () para contar los puntos.


Desafío extra: tu edad en minutos Escribe una función llamada edad_en_minutos que le diga al usuario qué edad tiene en minutos. Su código debe pedirle al usuario que ingrese su año de nacimiento y debe devolver su edad en minutos (restando su año de nacimiento al año actual). Aquí hay cosas a tener en cuenta:

a.            El usuario solo puede ingresar un año de nacimiento de 4 dígitos. Por ejemplo, 1930 es un año válido. Sin embargo, ingresar cualquier número de más o menos de 4 dígitos debería invalidar la entrada. Notificar al usuario que debe ingresar un número de cuatro dígitos.

b.            Si un usuario ingresa un año antes de 1900, su código debe decirle al usuario que la entrada no es válida. Si el usuario ingresa el año posterior al año actual, el código debe indicarle al usuario que ingrese un año válido.

Solución Propuesta: El código debe ejecutarse hasta que el usuario ingrese un año válido. Su función debe devolver la edad del usuario en minutos. Por ejemplo, si alguien ingresa 1930 como su año de nacimiento, su función debería devolver: Tiene 48,355,200 minutos. Recuerde importar el módulo de fecha y hora para este desafío. Para mantener el código en ejecución hasta que se ingrese un año válido, use el ciclo while.

 


Desafío 13: Paga tus impuestos Escribe una función llamada tu_IVA . La función no toma parámetros. La función le pide al usuario que ingrese el precio de un artículo y el IVA (el IVA debe ser un porcentaje). La función debe devolver el precio del artículo más el IVA. Si el precio es 220 y el IVA es del 15 %, su código debería devolver un precio con IVA incluido de 253. Verifique si su código puede manejar ValueError . Asegúrese de que el código se ejecute hasta que se ingresen números válidos. (Sugerencia: su código debe incluir un bucle while).

Solución Propuesta: En este desafío, puede usar el encasillamiento, la función input() y los bloques try y except para manejar los errores. La entrada del usuario siempre está en formato de cadena, por lo que usamos la función int() para convertirla en un número entero. El bloque de excepción garantiza que manejemos el ValueError . Hemos agregado el ciclo while para garantizar que el código se ejecute hasta que se ingresen números válidos.

 


 

Desafío extra: Pirámide de serpientes Escriba una función llamada python_snakes que tome un número como argumento y cree la siguiente forma usando el rango del número. (Sugerencia: use las bibliotecas de bucles y emoji). Si pasa 7 como argumento, su código debería imprimir lo siguiente:

�� 

��   �� 

��   ��   ��

��   ��   ��   �� 

��   ��   ��   ��   �� 

��   ��   ��   ��   ��   ��

Solución Propuesta:  Con este desafío, usamos bucles para crear una pirámide de serpientes. Importamos la biblioteca de emoji para obtener el emoji de serpiente. Vea el código a continuación:

 


Desafío 14: aplane la lista Escriba una función llamada flat_list que tome un argumento, una lista anidada. La función convierte la lista anidada en una lista unidimensional. Por ejemplo, [[2,4,5,6]] debería devolver [2,4,5,6].

Solución Propuesta: Observa cómo usamos los bucles for anidados en el siguiente código. El primer bucle for accede a la lista exterior y el bucle for interior accede a la lista interior. Una vez que accedemos a los elementos de la lista interna, los agregamos a la lista 1. Con este pequeño código, hemos aplanado la lista.

 


Desafío adicional: Salario de los maestros Una escuela le ha pedido que escriba un programa que calcule los salarios de los maestros. El programa debe pedirle al usuario que ingrese el nombre del maestro, el número de períodos enseñados en un mes y la tarifa por período. El salario mensual se calcula multiplicando el número de períodos por la tarifa mensual. La tarifa mensual actual por período es de $20. Si un maestro tiene más de 100 períodos en un mes, todo lo que supere los 100 es tiempo extra. El tiempo extra es de $25 por período. Por ejemplo, si un maestro ha enseñado 105 períodos, su salario bruto mensual debe ser de $2125. Escribe una función llamada tu_salario que calcule el salario bruto de un maestro. La función debe devolver el nombre del profesor, los períodos impartidos y el salario bruto. Así es como debe formatear su salida: Profesor: John Kelly, Períodos: 105 Salario bruto: 2,125

Solución Propuesta: El siguiente resultado asume que el usuario ingresa lo siguiente: nombre: John Kelly, períodos: 105 y tarifa: $20.

 

 

Desafío 15: Igual al revés Escriba una función llamada igual_al revés que tome una cadena y verifique si la cadena se lee igual al revés. Si es el mismo, el código debería devolver True; de lo contrario, debería devolver False. Por ejemplo, 'papá' debería devolver True, porque se lee igual al revés.

Solución Propuesta: Este desafío pone a prueba su capacidad para usar cortes de cadenas negativos, declaraciones if y operadores en Python. El operador [::1] invierte la cadena y el operador == compara la cadena original con la cadena invertida.

 

 

Desafío adicional: ¿Cuál es mi edad? Escribe una función llamada tu_edad . Esta función le pide a un estudiante que ingrese su nombre y luego devuelve su edad. Por ejemplo, si un usuario ingresa Peter como su nombre, su función debería devolver "Hola, Peter, tienes 27 años". Esta función lee datos de la base de datos (diccionario a continuación). Si el nombre no está en el diccionario, su código debe decirle al usuario que su nombre no está en el diccionario y preguntarle su edad. Luego, su código debe agregar el nombre y la edad al diccionario de nombres_edad a continuación. Una vez agregado, su código debe regresar al usuario, "Hola, (nombre agregado), tiene (edad agregada) años". Recuerde convertir la entrada del usuario a letras minúsculas. nombres_edad = {"jane": 23, " kerry ": 45, " tim ": 34, "peter": 27}

Solución Propuesta: Este desafío se trata de trabajar con diccionarios. Dado que todas las claves del diccionario están en minúsculas, convierta la entrada del usuario a minúsculas. Luego, iteramos sobre el diccionario para ver si el nombre de entrada existe en nuestra base de datos. Una vez que lo encontramos, usamos el método get() para acceder al valor del diccionario (que es la edad de la persona). Si el nombre no está en el diccionario, usamos el ciclo while para actualizar el diccionario con la nueva información del usuario. Una vez que actualizamos el diccionario, devolvemos la información actualizada al usuario. Vea el código a continuación:


Desafío 16: Sume la lista Escriba una función llamada sum_list con un parámetro que tome una lista anidada de enteros como argumento y devuelva la suma de los enteros. Por ejemplo, si pasa [[2, 4, 5, 6], [2, 3, 5, 6]] como argumento, su función debería devolver una suma de 33.

Solución Propuesta: En este ejercicio, usamos el ciclo for para aplanar las listas anidadas. Hemos creado una variable llamada counta . Cada número en la lista se agrega al conteo. Al final de la iteración, todos los números se habrán agregado al contador.

 

 

Desafío adicional: desempaca un nido nested_list = [[12, 34, 56, 67], [34, 68, 78]]

Escriba un código que genere una lista de los siguientes números de la lista anidada anterior: 34, 67, 78. Su salida debería ser otra lista: [34, 67, 78]. La salida de la lista no debe tener duplicados.

Solución Propuesta: Para este desafío, necesitamos escribir un bucle anidado para acceder a la lista interna de la lista anidada. Luego creamos una nueva lista de todos los números que necesitamos de la lista.


Desafío 17: Generador de nombres de usuario Escriba una función llamada nombre_usuario que cree un nombre de usuario para el usuario. La función debe pedirle al usuario que ingrese su nombre. Luego, la función debe invertir el nombre y adjuntar un número aleatorio entre 0 y 9 al final del nombre. La función debe devolver el nombre de usuario.

Solución Propuesta: En este ejercicio, puedes usar el módulo aleatorio. Cada vez que llamas a la función, el módulo aleatorio emite un número aleatorio entre 0 y 10. Este número se agrega al final del nombre usando el signo +. Usamos slicing [::-1] para invertir el nombre. Otra forma de evitarlo habría sido usar el método reverse() para invertir el nombre.


Desafío extra: ordenar por nombres de longitud = [ "Peter", "Jon", "Andrew"] Escriba una función llamada sort_length que tome una lista de cadenas como argumento y clasifique las cadenas en orden ascendente según su longitud. Por ejemplo, la lista anterior debería devolver: ['Jon', 'Peter', 'Andrew'] No utilice las funciones de clasificación integradas.

Solución Propuesta: Para este desafío, encontramos la palabra más larga y luego la intercambiamos con las palabras más cortas. Las palabras más cortas vienen primero y las palabras más largas vienen después.


Desafío 18: Cualquier número de argumentos Escriba una función llamada cualquier_número que pueda recibir cualquier número de argumentos (enteros y flotantes) y devuelva el promedio de esos enteros. Si pasa 12, 90, 12, 34 como argumentos, su función debería devolver 37,0 como promedio. Si pasa 12 y 90, su función debería devolver 51.0 como promedio.

Solución Propuesta: En este desafío, puedes aprender sobre * args . Puede usar cualquier palabra que desee como parámetro siempre que use el operador * al comienzo de la palabra. Sin embargo, es una convención común usar args . * args simplemente le dice a la función que no estamos seguros de cuántos argumentos necesitaremos, por lo que la función nos permite agregar tantos argumentos como sea posible. En el siguiente ejemplo, agregamos dos números como argumentos. Sin embargo, podemos agregar tantos números como queramos y la función funcionará bien. Los argumentos * hacen que las funciones sean más flexibles.

 

En esta función, hemos agregado más argumentos.


Desafío extra: sumar y revertir Escribe una función llamada add_reverse . Esta función toma dos listas como argumento, suma cada número correspondiente e invierte el resultado. Por ejemplo, si pasa [10, 12, 34] y [12, 56, 78]. Su código debería devolver [112, 22, 68]. Si las dos listas no tienen la misma longitud, el código debe devolver un mensaje de que "las listas no tienen la misma longitud".

Solución Propuesta: Este desafío se resuelve mejor usando la función range(). El primer paso es verificar si las listas tienen la misma longitud; usamos la función len () para eso. Una vez que confirmamos que las listas tienen la misma longitud, usamos la función de rango para obtener el índice de cada elemento de la lista. Luego agregamos los resultados y los agregamos a la lista vacía que creamos. Luego aplicamos el método de lista, reverse() a nuestra nueva lista para invertir el contenido de la lista.

 


 Desafío 19: Palabras y Elementos Escribe dos funciones. La primera función se llama count_words , que toma una cadena de palabras y cuenta cuántas palabras hay en la cadena. La segunda función, llamada count_elements, toma una cadena de palabras y cuenta cuántos elementos hay en la cadena. No cuente los espacios en blanco. La primera función devolverá la cantidad de palabras en una cadena y la segunda devolverá la cantidad de elementos (menos espacios en blanco). Si pasa "Me encanta aprender", la función count_words debería devolver 3 palabras y count_elements debería devolver 13 elementos.

Solución Propuesta: La función split() divide la cadena en cadenas más pequeñas. De forma predeterminada, la función split() utiliza espacios en blanco para dividir una cadena. Una vez que se divide la cadena, usamos el ciclo for para iterar a través de las cadenas y agregarlas a la variable de palabras. La función len () cuenta cuántos elementos hay en nuestra lista.

 Segunda función Dado que la función len () cuenta los espacios en blanco como elementos, usamos el método replace() para eliminar los espacios en blanco de la cadena antes de usar la función len ().

 

 

Desafío 20: Poner en mayúscula la primera letra Escribe una función llamada mayúscula. Esta función toma una cadena como argumento y escribe en mayúscula la primera letra de cada palabra. Por ejemplo, " me gusta aprender" se convierte en "Me gusta aprender".

Solución Propuesta: La función enumerar () devuelve el elemento y su índice mientras itera a través de la cadena. El método capitalize() pondrá en mayúscula la primera letra de una cadena. En este código, usamos el método islower () para verificar qué palabra en nuestra cadena tiene letras minúsculas. Luego usamos el método capitalize() para poner en mayúsculas estas palabras y agregarlas a una lista. Luego usamos el método join() para unir los elementos en nuestra lista de salida en una sola cadena.

 


Desafío extra: lista invertida str1 = ' leArning is hard, bUt if You appLy youRself ' \  you can achieVe success' . Se te da una serie de palabras. Algunas de las palabras de la cadena contienen letras mayúsculas. Escribe un código que te devuelva todas las palabras que tienen una letra mayúscula. Su código debe devolver una lista de las palabras. Cada palabra de la lista debe invertirse. Así es como debería verse su salida:

[' gninrAel ', ' tUb ', ' uoY ', ' yLppa ', ' flesRuoy ', ' eVeihca ']

Solución Propuesta: Para este desafío, importamos el módulo de cadena para obtener una lista de letras mayúsculas ( string.ascii_uppercase ). Verificamos si alguna de las palabras en la cadena tiene letras mayúsculas y, si las tienen, agregamos las palabras a la lista upper_names . Luego usamos reverse ([::-1]) para invertir las palabras en la lista.

 


 

 

 

 



0 comments:

Publicar un comentario