Ejercicios Python


Los siguientes son algunos ejercicios simples para resolver en Python 3, más o menos ordenados con la misma estructura que el curso.

El resultado a cada ejercicio está enlazado desde el número de cada ejercicio. La idea es que revisen la solución luego de resolverlo por ustedes mismos, o al menos de intentar (pensando) varias veces cómo resolverlo.


1. Intro

1.01. Hacer un programa que muestre "Hola mundo", y ejecutarlo para ver el mensaje en la pantalla. ¿Cómo lo ejecutó? ¿Qué otras maneras había de ejecutarlo?

1.02. Abra el Intérprete Interactivo de Python, y realice algunas acciones simples. Ingrese la órden help(). Ingrese la órden import this.

1.03. Suscríbase a la lista de Python Argentina y mande el primer mail con un "Hola mundo". Más instrucciones, aquí. Conéctese por IRC al servidor irc.freenode.org, y entre al canal #pyar. Ahora ya sabe cómo pedir ayuda, :)

1.04. Revise la documentación disponible en esta página.

1.05. Hacer un programa que muestre "Esto es un caño". Ejecútelo. ¿Funcionó correctamente? Si no, ¿qué ajustes tuvo que hacer para que la 'ñ' se vea bien?


2. Tipos de Datos

2.01. Escriba un programa que muestre la siguiente figura:
  \  |  /
    @ @
     *
   \"""/

2.02. Siendo a="Hola", b="mundo", c=87 y d=2.33145, armar y mostrar las siguientes cadenas:
  "Hola mundo"  (usando a y b)
  "-Hola-mundo-"  (usando a y b)
  "El resultado es: 87"  (usando c)
  "El resultado es: 87min (5220seg)"  (usando c ambas veces)
  "La temperatura es: 2.3"

2.03. Hacer un programa que le pida una cadena al usuario (usando la función "input") y la imprima a pantalla al revés. Por ejemplo, para el texto "Esto es así", debería mostrar:
    "ísa se otsE"

2.04. Hacer un programa que le pida un número al usuario (usando la función "input") y muestre ese número menos dos, más dos, multiplicado por dos, dividido por dos, dividido por dos de forma entera, y elevado a la potencia de dos. Por ejemplo, para el número 7, debería mostrar:
  5
  9
  14
  3
  3.5
  49

2.05. Pedirle un número al usuario, elevarlo al cuadrado, y mostrar los dígitos al reves y separados por espacio. Por ejemplo, si el usuario ingresa 17, la salida tiene que ser "9 8 2".

2.06. Pedirle tres números (que pueden ser con decimales) al usuario, base y altura de un rectángulo, y radio de un círculo. Calcular perímetro y área de cada figura.

2.07. Pedirle un número con muchos decimales al usuario y mostrarlo redondeado a 3 dígitos decimales, y como entero. ¿Qué tipo de redondeo usó? ¿Por qué?

2.08. Sumar 0.3 diez veces. Por otro lado, multiplicar 0.3 por diez. ¿El resultado es el mismo? ¿Por qué? ¿Qué tipo de dato debe usar?

2.09. Pedirle una frase al usuario e imprima, en orden, qué consonantes se utilizaron. Por ejemplo si se ingresó "la rana rené", mostrar "lnr".


3. Controles de flujo

3.01. Mostrar los números potencia de 2 menores a 10000 de la siguiente manera:
  0001
  0002
  0004
  0008
  ...
  8192

3.02. Pedir una frase al usuario y mostrar en mayúscula la inicial de cada palabra. Ejemplo, si el usuario ingresa "No somos nada", mostrar NSN.

3.03. Hacer un programa que le pida una cadena al usuario, y arme una triángulo creciente y decreciente con ese texto. Por ejemplo, para el texto "klop", el resultado sería:
  k
  kl
  klo
  klop
  klo
  kl
  k

3.04. Armar un programa que muestre todas las fichas de dominó, sin repetirlas, una por linea:
  1:1
  1:2
  ...
  6:6

3.05. Pedir al usuario un número entero, y mostrar la lista de 1 a ese número, junto con el correspondiente factorial. Por ejemplo, si el usuario ingresa 4 (prestar atención a lo prolijo del encolumnado):
  1  1
  2  2
  3  6
  4 24

3.06. Si listamos todos los números naturales menores a 10 que son multiplos de 3 o 5, tenemos 3, 5, 6 y 9. La suma de estos múltiplos es 23. Encontrar y mostrar la suma de todos los multiplos de 3 o 5 menores a 1000. Resultado: 233168

3.07. Se escriben todos los números enteros positivos en una lista, ordenados y empezando por el 1 (en la posición 0), luego se tachan todos los que tienen el dígito 9 al menos una vez, y después se tachan todos los múltiplos de 3. Considerando solamente los números no tachados, ¿qué número queda en la posición un millón? Resultado: 2735546

3.08. Encontrar dos números X e Y enteros, mayores o iguales que 2, tales que XY + YX = 94932 (eso es concatenando los dígitos de X e Y, no multiplicando). Resultado: X: 57 Y: 375

3.09. Escribir un programa que le pregunte un número al usuario. Si el número es 5, que muestre "Suerte!"; si el número es mayor a 10, que muestre "Grande!"; para los otros casos que muestre "Sin suerte, :(".

3.10. Pedirle una palabra al usuario e indicar si es un palíndromo.

3.11. Pedirle un texto al usuario, y mostrar el promedio de largo (hasta dos decimales) de todas las palabras (separando por espacio, tab, enter, etc, no por signos de ortografía) de ese texto. Por ejemplo, para el input "Hola, hermano, vine a visitarte", la salida sería 5.40.

3.12. Un número palíndromo se lee igual en los dos sentidos. El palíndromo más grande formado del producto de números de dos dígitos es 9009 (91 x 99). Encontrar el palíndromo más grande formado por el producto de dos números de tres dígitos. Resultado: 906609 (993 * 913)

3.13. Escribir un programa que le pregunte un número al usuario. Si el número es 5, que muestre "Suerte!"; si el número es mayor a 10, que le vuelva a pedir el número al usuario; para los otros casos que muestre "Sin suerte, :(".

3.14. Pedirle un texto al usuario, y hacer una estadística sobre cuantas veces aparece cada caracter, mostrando el resultado de mayor a menor respetando la alineación a la derecha de los números. Por ejemplo, para "nosotros no somos como los orozco, yo los conozco, son ocho los monos", debería mostrar:
  o 23
    12
  s  9
  n  5
  c  5
  m  3
  l  3
  z  2
  r  2
  ,  2
  y  1
  t  1
  h  1

3.15. Pedirle una dirección IP al usuario, en el formato de cuatro decimales separados por punto (validando que cada valor esté entre 0 y 255), y pasarla a una representación hexa. Ej: 20.20.350.20 -> error; 20.30.10.40 -> 141E0A28

3.16. Pedirle al usuario una contraseña y compararla con una cadena hardcodeada en el código ("secreta"). Si es correcta, mostrar "Bien!" y salir; si es incorrecta, volverla a pedir, pero sólo tres intentos, a la tercer falla mostrar "Incorrecto" y salir. Además, hacer esperar al usuario entre intento e intento, cada vez más.


4. Encapsulando código

4.01. Hacer una función que recibe un número y contesta "par" o "impar" en función de si el número es par o no.

4.02. A la misma función que en el punto anterior, agregarle un docstring (con pruebas incluidas, ver el módulo doctest).

4.03. Hacer una función que recibe dos números y devuelve "mayor" (si el primer número es mayor que el segundo), "menor", o "iguales".

4.04. Hacer una función que recibe un número y contesta "primo" o "no primo" en función de si el número es primo o no.

4.05. Al listar los primeros seis números primos (2, 3, 5, 7, 11 y 13), podemos ver que el sexto (6°) primo es 13. Cual es el 1000° número? Resultado: 7919

4.06. Hacer un programa que genere un número entero al azar (módulo random) entre 0 y 1000, y le vaya pidiendo al usuario que ingrese números enteros para adivinarlo. Si el usuario ingresa un número menor que el objetivo, muestra "Es más alto!"; si el usuario ingresa uno mayor, muestra "Es más bajo!"; si el usuario acierta, muestra "Viva Python!", y termina. Si el usuario no acertó en 7 intentos, que muestre "Alpiste perdiste! Booo" y termine.

4.07. Hacer una función que reciba un texto y devuelva el mismo texto pero con cada palabra invertida. Por ejemplo, llamándola con "Esto es una prueba", debe devolver "otsE se anu abeurp".

4.08. Hacer una función que reciba dos palabras y que imprima linea por linea las primeras, segundas, etc. letras de ambas palabras. Por ejemplo, llamándola con "Hola" y "mundo", el resultado sería:
    H m
    o u
    l n
    a d
      o

4.09. Encuentre la cantidad de enteros entre 1 y 107 para los cuales n y n+1 tienen la misma cantidad de divisores positivos enteros. Por ejemplo, 14 tiene el 1, 2, 7 y 14, mientras que 15 tiene 1, 3, 5 y 15. Resultado: 16

4.10. Cuando en un número la diferencia entre cada par de dígitos consecutivos es uno, se lo llama número "step" (como el 123234, el 9876787654, etc.). ¿Cuántos números "step" menores a un millón existen? Resultado: 458

4.11. Pedirle un texto al usuario y mostrar el mismo texto pero sin las vocales. Por ejemplo, para un input de "Yo estaba allí", debería mostrar "Y stb ll".

4.12. Armar una función que reciba una tupla y devuelva si la tupla está ordenada (de menor a mayor) o no.

4.13. Escribir dos funciones que permitan convertir de segundos a horas, minutos y segundos, correspondientemente.

4.14. Implemente una función con el mismo comportamiento que la función builtin abs, es decir, que devuelva el valor absoluto del argumento que reciba (y que funcione con números enteros, flotantes, y complejos).


5. Otros temas

5.01. Escribir un programa que reciba un nombre de archivo al ejecutarse, lo procese e imprima por pantalla cuántas líneas, cuantas palabras y cuántos caracteres contiene el archivo.

5.02. Escribir un programa que reciba un nombre de archivo al ejecutarse, y grabe (en otro archivo, mismo nombre más ".bz2"), el contenido comprimido con BZIP2.

5.03. Arme varias funciones que manejen una base de datos en SQLite; una que cree una tabla con los campos "fecha" y "descrip", otra que inserte allí un par de registros, y finalmente una que pida y muestre todos los valores.

5.04. Abrir la URL "http://www.google.com", leer el contenido, y mostrar los headers y el tamaño de la página leida.

- - -
Ejercicios Python - Copyright 2009-2013 Facundo Batista - Bitácora de Vuelo
Licencia: Atribución-No Comercial 2.5 Genérica