Puntos y vectores - Ejercicios de POO | Python

in Develop Spanish6 months ago (edited)

¡Buenas días! He aquí estoy de nuevo con más programación, luego de más de un mes retomé el progreso con Python. Ha sido un camino con bastantes altibajos, pero, no perderé tiempo tratando de justificarme, será avanzando que lograré esta meta.

Para esta oportunidad llegamos al módulo de programación orientada a objetos (POO), un paradigma de programación sumamente conocido. Recuerdo haberlo visto por primera vez en C++, por allá en mis comienzos de la carrera, en el 4to semestre. Tendría que haber sido en el 3ero pero por mi caída en Matemáticas II y las prelaciones extrañas del pensum no podía inscribir la materia que incluía ese tema.

Recuerdo que fueron varias horas de práctica para poder entender (y no a totalidad), los ejercicios que nos asignaron en aquel entonces. Diría que fue un semestre bastante pesado y "atropellado", cosa que en cierto sentido es "común" en la universidad, pero, que tuvo un plus de intensidad por la situación país que para aquel momento en cuanto a transporte y lo que sucedió en cuanto al comienzo de la pandemia.

Saliendo de la "reseña histórica", los 3 ejercicios de hoy se dividen en 2 que forman parte del mismo enfocado en la clase Punto y uno que parte de esta clase pues es sobre vectores.

Good morning! Here I am again with more programming, after more than a month I resumed the progress with Python. It has been a path with many ups and downs, but, I will not waste time trying to justify myself, it will be moving forward that I will achieve this goal.

For this opportunity we come to the Object Oriented Programming (OOP) module, a very well known programming paradigm. I remember seeing it for the first time in C++, back in my early career, in the 4th semester. It should have been in the 3rd but because of my fall in Mathematics II and the strange preemptions of the curriculum I could not enroll the subject that included that topic.

I remember several hours of practice to be able to understand (and not fully), the exercises that we were assigned at that time. I would say that it was a pretty heavy and "rushed" semester, something that in a certain sense is "common" in the university, but, that had a plus of intensity due to the country's situation at that time in terms of transportation and what happened at the beginning of the pandemic.

Leaving the "historical review", today's 3 exercises are divided into 2 that are part of the same focused on the Punto class and one that is part of this class because it is about vectors.


Portada post programacion, tech.gif
Edited with CANVA

Python SEPARATOR PSD FILE.png

image.png

image.png
From AZULSCHOOL.NET, Python course

Python SEPARATOR PSD FILE.png

Para empezar, en el primer apartado incluí una pequeña validación que encontré en un blog, en una entrada del 2016. La misma evita que se ingresen valores inválidos donde deben ir números (las coordenadas del punto). En cuanto a los atributos, pues fueron las coordenadas, cada una con su setter y getter. Luego el método "cuadrante", que devolvía como valor donde estaba ubicado el punto.

La ubicación se informaba según el valor de X e Y. Esto siguiendo las siguientes condiciones:

  • x>0 y y>0 para el cuadrante I.
  • x<0 y y>0 para el cuadrante II.
  • x<0 y y<0 para el cuadrante III.
  • x>0 y y<0 para el cuadrante IV.
  • x == 0 para el eje Y.
  • y == 0 para el eje X.
  • x == 0 e y == 0 para el origen.

Los resultados fueron los esperados al probar la asignación de valores y el método "cuadrante". Por ello pasé a la segunda parte que era trabajar el método con el decorador "@ property", de esta manera para llamarlo se hace como si se trabajase como atributo. Justo debajo muestro la captura que evidencia que el resultado es el mismo habiendo hecho el cambio, tal y como se esperaba.

To begin with, in the first section I included a small validation that I found in a blog, in a post from 2016. It prevents invalid values from being entered where numbers should go (the coordinates of the point). As for the attributes, well, they were the coordinates, each with its setter and getter. Then the "quadrant" method, which returned as a value where the point was located.

The location was reported according to the X and Y value. This following the following conditions:

  • x>0 and y>0 for quadrant I.
  • x<0 and y>0 for quadrant II.
  • x<0 and y<0 for quadrant III.
  • x>0 and y<0 for quadrant IV.
  • x == 0 for the Y axis.
  • y == 0 for the X-axis.
  • x == 0 and y == 0 for the origin.

The results were as expected when testing the value assignment and the "quadrant" method. For this reason I passed to the second part that was to work the method with the decorator "@ property", this way to call it is done as if it was worked as an attribute. Just below I show the capture that evidences that the result is the same having made the change, as expected.

Python SEPARATOR PSD FILE.png

image.png

image.png

image.png

image.png

image.png

image.png

Python SEPARATOR PSD FILE.png

Para la clase Vector utilicé la herencia, un concepto propio de la programación orientada a objetos, que como bien lo dice su nombre, está relacionada con "heredar", en este caso, los métodos y atributos de la clase "padre". De tal manera que la clase Vector puede ser muchísimo más resumida, evitando así la redundancia.

En cuanto a sus propiedades, pues tal como lo pide el enunciado, son dos puntos, a y b. Pero, el tercero se supone que sería una tupla (ab) que al trabajar con el decorador "@ property", retornaría la distancia entre ambos puntos como si se tratase de un getter.

Sin embargo, para este, decidí ir directamente al resultado, reduciendo líneas de código al introducir directamente la operación de tal manera que la distancia se guarda en una variable y luego se retorna, a partir de las coordenadas de x e y de cada punto en los atributos antes declarados.

Para la operación usé las funciones sqrt y pow de la biblioteca math. sqrt es la raíz cuadrada, pow es para elevar. Entonces dentro de la raíz van dos pow, el primero incluye el cuadrado de la posición en x del punto b menos la posición en x del punto a, para el segundo es el mismo procedimiento, pero con las coordenadas en y.

Así pues, al imprimir en pantalla la distancia, el resultado es el mismo que conseguiríamos si usásemos una calculadora externa, confirmando que la operación es correcta.

For the Vector class I used inheritance, a concept of object oriented programming, which as its name says, is related to "inherit", in this case, the methods and attributes of the "parent" class. In such a way that the Vector class can be much more summarized, thus avoiding redundancy.

As for its properties, as requested by the statement, there are two points, a and b. But, the third one is supposed to be a tuple (ab) that when working with the decorator "@ property", would return the distance between both points as if it were a getter.

However, for this one, I decided to go directly to the result, reducing lines of code by directly entering the operation in such a way that the distance is stored in a variable and then returned, from the x and y coordinates of each point in the attributes previously declared.

For the operation I used the functions sqrt and pow from the math library. sqrt is the square root, pow is for raising. Then inside the root go two pow, the first one includes the square of the x-position of point b minus the x-position of point a, for the second one is the same procedure, but with the y-coordinates.

So, when we print the distance on the screen, the result is the same as we would get if we used an external calculator, confirming that the operation is correct.

Python SEPARATOR PSD FILE.png

image.png

From GeometríaAnalítica.com

image.png

image.png

image.png

image.png

image.png
From Symbolab and Windows Calculator

Python SEPARATOR PSD FILE.png

Y bueno... ¡Eso es todo por hoy! Seguimos adelante con esta meta. Sigue un ejercicio de tinte más "RPG". Por ahora solo incluye texto, pero estará genial. Si tienes alguna sugerencia o corrección será bien recibida.

En lo personal te recomiendo mucho entrar también en este curso, doy fe de que es de muy buena calidad y vale cada centavo. Si quieres ingresar, clica aquí.

And well... That's all for today! We move on with this goal. A more "RPG" tinged exercise follows. For now it only includes text, but it will be great. If you have any suggestions or corrections they will be welcome.

Personally, I highly recommend you to join this course as well, I can attest that it is of very good quality and worth every penny If you want to join, click here.

Python SEPARATOR PSD FILE.png


Redes actualizada.gif


Puedes seguirme por acá si lo deseas:
You can follow me here if you want:

Cuenta secundaria
(Dibujos, edición y juegos) | Secondary account (Drawings, editing and games)

Sort:  

Saludos. Muy bien explicado, lo cual me permitió aprender mucho de tu proyecto. A la espera de nuevos proyecto para seguir aprendiendo. Feliz día

Muy buenas tardes, muchas gracias por sus palabras!

This is nice! It's pretty simple but actually you incorporated lots of OOP concepts here. Great work!

Thank you very much for your support!

La práctica hace al maestro mi hermano, te felicito Gabo 🏆🏆

Así es @soylegionario! Gracias por el apoyo :D

From Venezuela, our witness drives decentralization and the adoption of Web3 technology, creating opportunities for the local community and contributing to the global ecosystem. // Desde Venezuela, nuestro testigo impulsa la descentralización y la adopción de la tecnología Web3, generando oportunidades para la comunidad local y contribuyendo al ecosistema global.


Sigue, contacta y se parte del testigo en: // Follow, contact and be part of the witness in:

Vota por el testigo @Hispapro // Vote for the @Hispapro witness

Keychan -
Hive.blog / https://wallet.hive.blog/~witnesses
- Ecency - Peakd

¡Gracias por el apoyo!