Bienvenidos una semana más a nuestro curso de Python. Hoy os voy a dar las soluciones a los ejercicios que os propuse en la entrada anterior para que así sepáis si vuestra solución es correcta o no. No hay una solución única a los ejercicios, yo he propuesto mi solución para que veáis cúal es el resultado que estaba buscando. Así que empecemos.
Ejercicio 1: Crear una calculadora
Mi solución ha sido la de crear una función por operación y he añadido un menú para el usuario, lo complicado de este ejercicio es darse cuenta que los datos que recogemos por teclado son «string» y tenemos que transformarlos al tipo adecuado para que se puedan resolver las operaciones. Por ejemplo para sumar y restar enteros, tendremos que poner que son de tipo «int», pero si queremos trabajar con decimales tendremos que especificar que sean de tipo «float».
El menú que he creado consta de 4 opciones, una por operación (sumar, restar, multiplicar y dividir) y una opción más para salir del programa.
#Programa calculadora
# Declaricion de variables
opcion = 0
#Declaracion de Funciones1
def suma(a, b):
return str(a + b)
def resta(a,b):
return str(a - b)
def multiplicar(a,b):
return str(a * b)
def dividir(a,b):
return str(a / b)
#Inicio del programa
while ('5' != opcion):
opcion = input('''Por favor seleccione una operacion:
1 Sumar
2 Restar
3 Multiplicar
4 Dividir
5 Salir
''')
if (opcion == '1'):
Dato1 = input('''Primer sumando: ''')
Dato2 = input('''Segundo sumando: ''')
print ("Resulta de "+Dato1 +" + "+ Dato2+ ": "+suma(int(Dato1),int(Dato2)))
elif opcion == '2':
Dato1 = input('''Minuendo: ''')
Dato2 = input('''Sustraendo: ''')
suma(Dato1,Dato2)
print("Resulta de " + Dato1 + " - " + Dato2 + ": " + resta(int(Dato1), int(Dato2)))
elif opcion == '3':
Dato1 = input('''Multiplicando: ''')
Dato2 = input('''Multiplicador: ''')
suma(Dato1,Dato2)
print("Resulta de " + Dato1 + " * " + Dato2 + ": " + multiplicar(int(Dato1), int(Dato2)))
elif opcion == '4':
Dato1 = input('''Dividendo: ''')
Dato2 = input('''Divisor: ''')
suma(Dato1,Dato2)
print("Resulta de " + Dato1 + " / " + Dato2 + ": " + dividir(float(Dato1), float(Dato2)))
elif opcion == '0' or opcion>'5':
print("Opcion incorrecta")
if (opcion!= '5'):
input("Pulse Enter para continuar...")
print('Fin del programa')
Ejercicios 2, 3 y 4: Listas
Con estos ejercicios pretendía que os familiarizarais con las listas. Para ordenar listas, hay 2 opciones.
- Crear un algoritmo que cree una nueva lista con los elementos ordenados
- Utilizar la función sort.
Yo he optado por la segunda opción ya que nos simplifica la programación. Para guardar en un fichero las listas solo tendremos que reutilizar lo aprendido en el capítulo de ficheros. Recordar que en un fichero tenemos que guardar «string» así que tendremos que hacer una conversión de «lista» a «string».
Cuando unificáis las listas, podéis realizar una suma entre ellas. Esto es debido a que Python ya tiene esa funcionalidad implementada y de este modo nos lo hace más sencillo el utilizar estas listas. A continuación os dejo los ejemplos de las soluciones.
Código ejercicio 2
lista1=[3,4,1,2]
lista1.sort()
print(lista1)
Código ejercicio 3
import pickle
with open('prueba.txt', 'wb') as f:
pickle.dump(lista1, f)
lista1.sort()
print(lista1)
with open('prueba.txt', 'wb') as f:
pickle.dump(lista1, f)
Código ejercicio 4
import pickle
lista4 = [5, 4, 8, 7]
lista5 = [3, 6, 1, 2]
lista6 = lista4 + lista5
lista6.sort()
print(lista6)
with open('prueba.txt', 'wb') as f:
pickle.dump(lista6, f)
Ejercicio 5: Torres de Hanói
Este ejercicio era el gran reto, ya que os introduje a las funciones recursivas, es decir, aquellas funciones que se llaman a sí mismas. Vamos hacer un poco de memoria para ver de qué se trataba este ejercicio.
Lo que buscaba era la reproducción del juego de las torres de Hanói, el cual consta de 3 torres, la primera tendrá una serie de discos colocados de mayor a menor comenzando por la base. Y lo que se quiere es llevar todos los discos a la última torre. La regla del juego es que nunca puede haber un disco de mayor tamaño sobre uno pequeño, es decir el disco de mayor tamaño siempre tiene que estar debajo y no se permite colocar encima de un disco uno mayor que él.
Como todavía no hemos realizado nada gráfico con Python, la solución que os propongo os dice los movimientos que hay que hacer de manera textual, de modo que si seguimos esas instrucciones resolveremos el juego.
def hanoi(N, inc='1', temp='2', fin='3'):
if N > 0:
hanoi(N - 1, inc, fin, temp)
print('se mueve de torre', inc, 'a torre', fin)
hanoi(N - 1, temp, inc, fin)
discos = int(input("Introducir el numero de discos:"))
hanoi(discos)
Espero que estos ejercicios no os hayan resultado muy difíciles, sentiros libres de preguntar dudas y estaré encantado de resolvéroslas. En los próximos capítulos os introduciré en la programación orientada a objetos. Este tipo de programación nos obliga a plantear las soluciones desde otro punto de vista.