El libro

El libro puede conseguirse tanto en papel como en PDF en la página de Bubok para Introducción a la programación con Python.

Este libro es el fruto de la experiencia impartiendo el curso “Introducción a la programación con Python” como taller del Campus de Ourense en la Universidad de Vigo, en la que se descubre el mundo de la programación través de Python 3. Las lecciones de programación están orientadas hacia principiantes en el mundo de la programación de ordenadores.

Ejercicios

Ejercicios resueltos en IDEOne sobre Python.

Secuencia

  1. Solución. ¡Hola, mundo! en Python.
  2. Solución. Transforma segundos leídos desde el teclado en horas, minutos y segundos.
  3. Solución. Calcula la velocidad media tras leer desde el teclado distancia y tiempo (en minutos).
  4. Solución. Transforma horas, minutos y segundos leídos desde teclado en el total de segundos.

Decisión

  1. Solución. Decide si el primer carácter de un texto leído por teclado es dígito o letra.
  2. Solución. Determina si un año leído desde teclado es bisiesto o no. Los años son bisiestos si son divisibles entre 4 pero no entre 100, o entre 100 y 400.
  3. Solución. Calcula la nota de un alumno, teniendo en cuenta que en dicha nota se tienen en cuenta las partes de teoría y práctica. Para poder hacer media, ambas partes deben superar el 4. La nota final se calcula multiplicando cada parte por su valor, que es un porcentaje entre 0 y 100. Solo se pide el valor de la nota de teoría, pues el valor de la nota de prácticas es el restante hasta 100.

Repetición

  1. Solución. Convertir un valor binario (base 2), leído desde teclado, a base 10.
  2. Solución. Conversion de un valor natural pedido por teclado de base 10 a base 8.
  3. Solución. Calcula el producto de dos enteros pedidos por teclado mediante la suma repetitiva.
  4. Solución. Resuelva la Conjetura de Collatz para un número natural leído por teclado. Según Collatz, cualquier valor natural (i.e., entero positivo), puede llegar a transformarse en 1 aplicando los siguientes pasos: si es par, dividirlo por dos; si es impar, multiplicarlo por 3 y sumarle uno.
  5. Solución. Factorial: calcula el factorial de un número natural leído por teclado, de forma que: n! = n * (n - 1) * (n - 2) ... * 1. Por ejemplo, 5! = 5 * 4 * 3 * 2 * 1.

Repetición y decisión

  1. Solución. Mastermind: el ordenador selecciona un número entero, y le pide al usuario que lo adivine. Cada vez que introduce un valor, el ordenador le indica la usuario si el elegido por él es mayor o menor al introducido.
  2. Solución. Ticket: se piden importes hasta que se introduzca un cero. Junto a cada importe, se pide también el IVA, que puede ser: g - general (21%) ,r - reducido (10%), y s - superreducido (4%). Se debe calcular el total de importe y total de IVA. Descuentos: por el total del importe: 0% < 1000; 5% >= 1000 y < 10000; y 10% >= 10000. Los descuentos se aplican al importe total y al IVA total. Se suman los totales al final.

Listas

  1. Solución. Resuelva la Conjetura de Collatz para un número natural leído por teclado. Según Collatz, cualquier valor natural (i.e., entero positivo), puede llegar a transformarse en 1 aplicando los siguientes pasos: si es par, dividirlo por dos; si es impar, multiplicarlo por 3 y sumarle uno. La particularidad de esta versión es el requerimiento de utilizar listas para almacenar la sucesión resultante, en lugar de mostrarla directamente.
  2. Solución. Escribir un programa que calcule las n primeras posiciones de la sucesión de Fibonacci. La sucesión de Fibonacci consiste en empezar con los dos primeros elementos siendo 0 y 1. Los siguientes elementos se calculan sumando el valor en la posición anterior, y el valor en la penúltima posición.

Diccionarios

  1. Solución. Calcula las frecuencias de aparición de cada carácter en un texto pedido por teclado.
  2. Solución. Un programa que comprueba si tiene guardada la temperatura de una ciudad introducida por teclado. Si tiene datos los muestra. En otro caso, pide una temperatura para dicha ciudad y la guarda con los datos del resto de ciudades.

Funciones

  1. Solución. Escribe un programa que, mediante la tortuga, dibuje un cuadrado de lado x, y más abajo, un cuadrado de lado x/2. El valor x es escogido al azar.
  2. Solución. Crea un programa que dibuje varias figuras polinómicas, las que tú quieras. Lo único obligatorio es crear la función dibuja_polinomio(nl, dl), de forma que nl será el número de lados y dl la distancia de cada lado. Recuerda que una circunferencia tiene 360º, y los ángulos de un polígono regular son todos iguales, así que para obtener un polígono regular de n lados, será necesario que los ángulos sean de (360/n)º.
  3. Solución. Escribe un programa que, mediante la tortuga, dibuje un donut con circunferencias de radio r. Utiliza círculos que giran alrededor de un eje. Es obligatorio crear la función dibuja_donut(r), siendo r el radio de dichos círculos. Por ejemplo, es posible girar de 10 en 10 grados 36 veces, lo que que hace que se dibuje la circunferencia de circunferencias completa. Para que haya una separación en el centro, además de girar 10º, será necesario avanzar tanto como grande se desee el "agujero".
  4. Solución. Dibuja una escalera mediante la tortuga. Básicamente, se tratará de crear escalones repitiendo avanzar, girar hasta apuntar 90º, y avanzar, girando de nuevo hasta 0º. Crea la función dibuja_escalera(num_escalones), donde num_escalones es el número de peldaños en la escalera.
  5. Solución. Escribe un programa que, mediante la tortuga, dibuje un poblado. Cada casa constará de un cuadrado (las paredes), y un triángulo, como mínimo. El número total de casas será escogido al azar. El número total de casas será escogido al azar. Obligatoriamente, debes crear las funciones dibuja_poligono(nl, dl), donde nl es el número de lados y dl el tamaño del lado; además, la función dibuja_casa(dl) que dibuja una casa con el tamaño de lado siendo dl.
  6. Solución. Mediante la tortuga, crea una función que dibuja un árbol fractal. Las figuras fractales comparten una característica común: cualquiera de sus partes es igual al todo o cualquier otra parte, simplemente variando en tamaño. Así, la forma más sencilla y directa de crear una figura fractal es utilizar una función recursiva, es decir, una función que se llame a si misma. Esta función será dibuja_arbol(d), donde d será el tamaño de la rama. Así, básicamente el árbol se construye dibujando una línea de tamaño d. Entonces, se gira 45º a la izquierda, y se invoca recursivamente a la función con, digamos, d/2. A continuación, se gira 90º a la derecha y se vuelve a invocar recursivamente la función con d/2. Todas las funciones recursivas tienen un caso base y un caso normal. El caso base sería cuando d es 1. En ese caso, se puede optar por volver sin dibujar nada. El caso normal sería el descrito en el párrafo anterior. Experimenta con la función... en este ejemplo, se puede configurar la profundidad (es decir, el número de ramas) que se quiere obtener, el grueso de partida de la rama... etc.

Programación orientada a objetos

  1. Solución. Escribe un programa que permita representar puntos mediante objetos. Cada punto, de dos dimensiones, guardará las coordenadas x e y. Tendrá obligatoriamente los métodos __init__(self, x, y) y __str__(self), para poder tanto inicializarlo como obtener sus datos en formato texto, respectivamente. Además, proveerá de los métodos calcula_distancia(self, p2) y calcula_distancia_origen(self). Para comprobar que funciona, crea un par de objetos Punto, y comprueba que las distancias entre ellos y las distancias al origen son correctas. Como método estático, crea get_origen(), que devolverá siempre el mismo objeto Punto con coordenadas 0, 0.
  2. Solución. Escribe un programa que permita representar personas mediante objetos. Cada persona guardará el nombre y el e.mail. Tendrá obligatoriamente los métodos __init__(self, nombre, email) y __str__(self), para poder tanto inicializarlo como obtener sus datos en formato texto, respectivamente. Además, proveerá el método formatea_nombre(self), que devuelve el nombre en el formato "apellidos, nombre".
  3. Solución. Crea un programa en el que se permita representar empleados, como tipos de personas (usa herencia con respecto a la clase Persona del punto anterior). La nueva clase tendrá soporte para guardar la información sobre en qué empresa trabaja la persona, información que se representará en __str__(self). Será necesario también crear un método de inicialización acorde, con nombre, e e.mail (para inicializar la parte del objeto relativa a la clase Persona), y el nombre de la empresa.
  4. Solución. Crea, mediante composición, una clase Línea que permita modelar líneas que se componen de un Punto inicial y otro final. Crea un método que permita calcular la longitud de la línea (emplea los métodos de calcular la distancia de Punto para esto). Crea un método __str__(self) que devuelva al menos la información sobre los puntos de inicio y final.
  5. Solución. En un juego de dados, todos los participantes tienen el mismo número de dados (con n caras, de la 1 a la n). En cada turno, cada jugador tira todos sus dados, sumando cada dado para obtener una puntuación. Gana el jugador con mejor puntuación tras x turnos.

<< Volver a Libros.