10. Programación orientada a objetos#
-
Definir una clase
Point
que se pueda utilizar para representar puntos en el plano. La clase debe instanciarse utilizando 2 floats, que deben guardarse como estado de la misma. Definir, además, los siguiente métodos:__repr__()
que devuelve una representación como string de la clase.distance()
que devuelve la distancia del punto a otro punto pasado como argumento.get_x()
yget_y()
que devuelven las coordenadas cartesianas x e y del punto.get_norm()
yget_angle()
que devuelven las coordenadas polares que representan el punto.
Verificar que se puede reproducir la siguiente sesión en la consola interactiva de python.
-
Definir una clase Triangle, usada para modelar un triángulo, cuyo estado sea modelado por una lista de coordenadas. Definir los siguientes métodos como parte del comportamiento:
get_area()
, que devuelve el área del triángulo.
-
Crear un objeto Rectangle que represente un rectángulo.
-
Debe tener un método para representarse de forma que la siguiente interacción sea posible:
-
Dentro del comportamiento del objeto, debe ser posible solicitarle el área (mediante un método
get_area()
).
-
-
Agregar a las clases
Rectangle
yTriangle
el métodoget_perimeter()
que retorne el perímetro de la figura. -
Definimos que dos figuras geométricas son iguales si son de la misma clase y tienen el mismo perímetro y área. Implementar el método
__eq__
que recibe otro objeto y retornaTrue
si son iguales yFalse
en caso contrario. -
Se tiene una lista de figuras geométricas y se desea ordenarlas por perímetro, de mayor a menor. Sabemos que las listas en el lenguaje Python contienen un método llamado
sort
que comanda a la lista a ordenar sus elementos. Para que ese método funcione, los elementos de la lista deben poder ser comparados. Particularmente, funciona si la relación<
entre los objetos funciona, es decir,A < B
devuelveTrue
oFalse
.Implemente el comportamiento necesario en las clases
Rectangle
yTriangle
que permita ordenarlos.Verifique que la siguiente sesión ejecutada en la consola interactiva funciona y devuelve una lista ordenada.
-
Definir una clase
GeometryFigure
de la cual heredan Rectangle y Triangle. Revisar los ejercicios anteriores pensando en esta clase madre. -
Definir una clase Interval, la cual debe representar un intervalo de valores reales.
- La misma debe tener una forma de asignarle el paso (step si pensamos en
range
de python). - Debe implementar un método
get_next()
que retorne el próximo valor del intervalo tomando como base el inicio del intervalo y el paso preseteado, pero teniendo en cuenta el avance que se tuvo y no retornar siempre el mismo valor. - Implementar el método
has_next()
que retorneTrue
si existe otro valor en el intervalo utilizando dicho paso.
El siguiente fragmento de código debe ser funcional:
- La misma debe tener una forma de asignarle el paso (step si pensamos en
-
Escribir una versión del juego “Piedra, Papel o Tijera” basado en objetos. Utilice las clases
Scissors
,Rock
yPaper
para representar las opciones disponibles. Utilice una función principalmain
para ejecutar el juego, el oponente será la computadora. Cada instancia deScissors
,Rock
yPaper
debe tener un métodocmp
que reciba otra instancia y retorne un número siguiendo las siguientes reglas:- El número es mayor a cero en caso que el mismo objeto (self) sea ganador.
- El número es menor a cero en caso que el mismo objeto (self) sea perdedor.
- El número es igual a cero en caso de empate.
Utilizar dicha funcionalidad para crear un juego interactivo donde se vayan contando los puntos del jugador y la computadora.
-
Mini Flete Las camionetas asignadas al servicio de minifletes están compuestas de 2 espacios de baúl para llevar carga. La Kangoo tiene un primer baúl de 800 dm³ y un segundo 2000 dm³, con una capacidad máxima total de 600 kg de carga útil para ambos espacios. La Master tiene el primer baúl de 2400 dm³ y el segundo de 5000 dm³ con 1500 kg de carga útil para ambos espacios. Las encomiendas tienen un código identificador, volumen expresado en dm³ y peso expresado en kg.
Se pide modelar las clases Camioneta y Encomienda con los siguientes atributos de estado y comportamiento:
Camioneta
- Permitir identificarlas, por ejemplo
"Kangoo"
,"Master"
,"8a57-475d-8384"
, etc.; la capacidad de carga en volumen de sus 2 espacios de baúl y la capacidad de kilos. - Contar con un método para contestar si una encomienda entra en la camioneta. Es decir, si aún hay espacio disponible en algún baúl y no se sobrepasó el límite de peso total de la camioneta.
- Permitir cargar encomiendas. La encomienda se asignará al baúl más liberado. Se deberá garantizar que aún hay espacio disponible y no se sobrepasó el límite de peso total de la camioneta.
- Permitir quitar la encomienda según su Identificador, puede que no esté en la camioneta, incluso se encuentre en cualquier baúl.
- Permitir vaciar la camioneta.
-
Imprimir, usando
print(van)
, el estado de la camioneta con la siguiente información según el siguiente formato y dondevan
es una variable de tipo Camioneta:
Encomienda
Las encomiendas tienen un código identificador, volumen expresado en dm³ y peso expresado en kg.
La siguiente lista de encomiendas se encuentran en el archivo
"martes.txt"
y responden a las asignaciones diarias para la camioneta Kangoo.El método de carga de la compañía de miniflete consiste en primero ordenar las encomiendas del día según su volumen de las más grandes a las más pequeñas. Luego ir cargando los baúles según aquél que tenga mayor espacio disponible. Si alguna encomienda supera el peso límite o no entra en ningún baúl, separarla para un futuro viaje y continuar con la siguiente. Una vez revisada todas las encomiendas, realizar el viaje. Al regresar con los baúles vacíos repetir el procedimiento de carga con las encomiendas que fueron separadas previamente.
Se pide escribir el método
plan_viajes(nombre_file: str)
que lea e interprete la sintaxis e implemente el algoritmo de carga descrito e imprima por consola el plan de viajes con el listado de encomiendas para cada viaje. - Permitir identificarlas, por ejemplo