IIC2233 / Syllabus-2022-1

Repositorio oficial del curso IIC2233 Programación Avanzada 🚀✨
https://iic2233.ing.puc.cl/
45 stars 40 forks source link

Librerías permitidas, no permitidas y malas prácticas T0 #12

Closed matiasmasjuan closed 2 years ago

matiasmasjuan commented 2 years ago

Para consultar sobre una librería deben responder esta issue con una pregunta de la siguiente forma:

Puedo usar la librería nombre_librería para hacer explicación_de_lo_que_quiero_hacer

¡Recuerden especificar en su README qué librerías utilizan!


Librerías Permitidas

Librerías Prohibidas

☠️ Built-ins Prohibidos

El uso de alguna de las siguiente funciones es automáticamente un 1,0 sin discusión. 😭

¡Ánimo y éxito en sus tareas! 📬️🚐️

Jeremiah-PHP6 commented 2 years ago

Se puede usar la librería tabulate para mostrar las encomiendas hechas por el usuario?

Chumi-Colores commented 2 years ago

¿Puedo usar la librería time para hacer time.sleep(random.randint(1,2)) para simular una pantalla de carga? No solo lo hace más realista cuando se pasa a un menú distinto. Sino que también hace que sea más fácil leer el texto que aparece en pantalla para el usuario.

matiasmasjuan commented 2 years ago

Hola!! @Jeremiah-PHP6 : , puedes usar la librería tabulate para mostrar las encomiendas en un formato mas "ordenado". Recuerda indicarlo en tu archivo README.md para que el ayudante corrector sepa que debe instalar esa librería antes de ejecutar tu tarea.

@Chumi-sun : No puedes usar la función sleep de time. Si bien es cierto que agregar delays puede hacer que el programa sea mas realista, el uso de pausas en el código puede ocasionar molestias al momento de corregir 😢. Imaginen que en la corrección ejecutamos su tarea varias veces, al momento de tener pausas lo único que ocasionas es que el tiempo de revisión aumente considerablemente.

Chalecons commented 2 years ago

Hola, no es una duda respecto a una libreria en particular, pero es posible el uso de clases? Lo pregunto puesto que OOP es materia vista en el curso de introducción a la programación, pero dicha materia está disponible en la semana 2 de contenidos.

Gracias de antemano.

matiasmasjuan commented 2 years ago

Hola @Chalecons !

, pueden hacer uso de cualquier contenido visto en el curso de introducción a la programación, por lo que está permitido el uso de clases, aunque no es obligatorio. Si bien en ese curso vieron una introducción a objetos, a lo largo de este curso veremos contenidos más profundos en relación al tema, por lo que recomendamos fuertemente revisar esos contenidos, ya que serán evaluados en las futuras tareas y actividades.

Rolivares2 commented 2 years ago

Hola, se puede hacer uso de la materia de manejo de excepciones para manejar los errores del usuario?

Desde ya, muchas gracias!

FabriRandon commented 2 years ago

Puedo usar un archivo.py para almacenar variables de textos como constantes para que quede más ordenado?

matiasmasjuan commented 2 years ago

Hola! @Rolivares2 : , puedes hacer uso de los contenidos de excepciones para manejar los inputs del usuario. Ahora bien, debes asegurarte de capturar correctamente los tipos de errores, ya que si usas solamente except Exception será considerado como mala práctica y tendrá penalización.

@FabriRandon : , está permitido el uso de nuevos archivo.py para almacenar valores constantes, como los textos estándares de los menús o aspectos de ese estilo. Ahora bien, hacer uso de otros archivos.txt o similares para almacenar variables temporales estaría prohibido, ya que la idea es que almacenen esas variables a lo largo de la ejecución del programa sin recurrir a archivos externos.

Maratripa commented 2 years ago

Hola, puedo hacer uso de la libreria 'os' para limpiar la pantalla cuando cambio de menu?

matiasmasjuan commented 2 years ago

Hola @Maratripa ! No, no puedes usar la librería os para limpiar la consola. Si bien esto podría verse más ordenado al momento de ejecutar la tarea, puede que el ayudante corrector quiera ver el estado de la consola en menús anteriores, por lo que limpiando la consola solo dificultarías más la corrección. Ahora bien, si quieres usar la librería os para utilizar paths relativos para los archivos, estaría permitido.

diegorakos commented 2 years ago

Hola, se pueden utilizar subclases (contenido semana 2)?

matiasmasjuan commented 2 years ago

Hola @diegorakos ! , pueden hacer uso de los contenidos de Programación orientada a objetos vista en el curso. Ahora bien, en el caso de que vayas a utilizar herencia, asegurate de que el modelamiento tenga sentido. Por ejemplo, no porque exista la clase Mesa (que tiene 4 patas) y la clase Perro (también tiene 4 patas) implica que Perro deba heredar de Mesa. Esto sería una mala práctica y perjudicaría la lectura y compresión del código.

ghost commented 2 years ago

Hola! Puedo hacer uso de los métodos .isnumeric() y .isalpha() para revisar que los inputs del usuario sean del tipo correcto?

matiasmasjuan commented 2 years ago

Hola @benja420p ! , no hay problema con que uses esos built-ins para verificar los inputs del usuario.

Maratripa commented 2 years ago

Hola, una preguntaa, puedo usar la función de python exit() en vez de sys.exit()?

matiasmasjuan commented 2 years ago

Hola @Maratripa !

No, no puedes el built-in exit de python directamente, ya que puede no ser buena buena práctica. Si bien ambas funciones podrían ser "iguales" a simple vista, en realidad hay pequeñas diferencias.

exit lo que realiza es cortar la ejecución del programa, por lo que cualquier comando o línea siguiente simplemente no será ejecutada. En cambio, sys.exit proviene del módulo sys el cual siempre se encuentra disponible. Además, lo que realiza es levantar una excepción SystemExit, por lo que uno podría captar ese error y darle nuevas funcionalidades si uno lo considera necesario. En ese sentido, utilizar sys.exit es una forma un poco más "limpia" de terminar con la ejecución del programa y no estaría cerrándolo de forma tan abrupta.

FlorenciaOnetto commented 2 years ago

se puede usar la librería "tabulate" en la tarea 0?

matiasmasjuan commented 2 years ago

Hola @FlorenciaOnetto ! Tal como comenté con anterioridad, sí está permitido:

Hola!! @Jeremiah-PHP6 : , puedes usar la librería tabulate para mostrar las encomiendas en un formato mas "ordenado". Recuerda indicarlo en tu archivo README.md para que el ayudante corrector sepa que debe instalar esa librería antes de ejecutar tu tarea.

@Chumi-sun : No puedes usar la función sleep de time. Si bien es cierto que agregar delays puede hacer que el programa sea mas realista, el uso de pausas en el código puede ocasionar molestias al momento de corregir cry. Imaginen que en la corrección ejecutamos su tarea varias veces, al momento de tener pausas lo único que ocasionas es que el tiempo de revisión aumente considerablemente.

jinfantel commented 2 years ago

Hola! Se puede hacer uso de la función quit()?

matiasmasjuan commented 2 years ago

Hola @jinfantel !

Tal como comenté con anterioridad:

Hola @Maratripa !

No, no puedes el built-in exit de python directamente, ya que puede no ser buena buena práctica. Si bien ambas funciones podrían ser "iguales" a simple vista, en realidad hay pequeñas diferencias.

exit lo que realiza es cortar la ejecución del programa, por lo que cualquier comando o línea siguiente simplemente no será ejecutada. En cambio, sys.exit proviene del módulo sys el cual siempre se encuentra disponible. Además, lo que realiza es levantar una excepción SystemExit, por lo que uno podría captar ese error y darle nuevas funcionalidades si uno lo considera necesario. En ese sentido, utilizar sys.exit es una forma un poco más "limpia" de terminar con la ejecución del programa y no estaría cerrándolo de forma tan abrupta.

La función quit funciona prácticamente igual a la del exit, solamente que también está levantando la excepción SystemExit. Ahora bien, quit proviene del módulo site, el cual siempre se encuentra disponible al trabajar desde el interprete, pero no siempre lo estará si estas trabajando en proyectos de producción y debes tener esa librería cargando. En cambio sys.exit viene del módulo sys que siempre se encuentra disponible. Para efectos de este curso, no importaría cual usar, pero al trabajar en otro tipo de proyectos más avanzados y poseas algún trabajo en producción, es recomendable utilizar sys.exit ya que te aseguras que el módulo siempre estará disponible.

En resumidas cuentas, si deseas cerrar el programa en algún momento determinado, es más recomendable utilizar sys.exit ya que es considerado una mejor práctica.

Fhanz commented 2 years ago

Hola @matiasmasjuan, que sys se encuentre siempre disponible significa que está permitido usar otros métodos de sys como por ejemplo sys.path.insert para añadir un directorio al path del sistema?

matiasmasjuan commented 2 years ago

Hola @Fhanz ! No, cuando me refiero a disponible, es que se encuentre a disposición en la librería estándar de python en todo tipo de proyectos, no ha que este disponible en el curso. Con respecto a tu segunda pregunta sobre el uso de sys.path.insert, estaría prohibido. Recuerda que dentro de las librerías permitidas está solo el uso de sys.exit, no cualquier función de sys. Ahora bien, no veo el uso que le podrías dar a sys.path.insert, ya que me imagino que lo utilizarías para agregar paths absolutos a alguna ruta específica de tu sistema, lo cual tendría una penalización por formato según la guía de descuentos. No veo la necesidad de agregar un directorio al path, ya que si lo que quieres es abrir archivos contenidos en otras subcarpetas, perfectamente lo podrías realizar concatenando las rutas mediante os.path.join. Te recomiendo revisar los contenidos de Paths de la semana 0 para mayor información.

Fhanz commented 2 years ago

De hecho, lo que hago con la función sys.path.insert es entregarle el path relativo hecho con os.path.join para importar un archivo con extensión .py. Aún así no está permitido?

NicolasOlmosQuiroga commented 2 years ago

Hola! Queria saber si era mala practica el colocar en determinadas partes de la tarea inputs con texto diciendo "Pulse cualquier tecla para continuar", esto lo hago por ejemplo cuando el usuario quiere ver el estado de sus encomiendas y asi el usuario pueda visualizar el tiempo que quiera sus encomiendas y cuando termine se devuelva al menu de usuario, leí arriba que la libreria time con el comando sleep no se puede usar pero no estaba seguro si lo que estoy haciendo yo esta permitido o si seria una carga extra para la correción. Eso, ¡muchas gracias!

jahernandez2 commented 2 years ago

Hola! Puedo hacer uso de los métodos .isalnum() para revisar que los inputs del usuario sean del tipo correcto?

matiasmasjuan commented 2 years ago

@Fhanz : sys.path.insert está prohibido. Independiente que le entregues un path relativo para importar un archivo, al trabajar con sys.path estarías trabajando con el importador de librerías de python y para efectos de esta tarea no tiene ningún sentido que lo utilicen. Recuerda que todo lo que sea en el mismo nivel de directorio lo pueden importar normalmente, sin la necesidad de usar sys.path. Insisto en revisar los contenidos de Paths para evitar el uso de sys.path.

@NicolasOlmosQuiroga: , no hay problemas con que utilices un input con ese tipo de texto incluido 👌 .

@jahernandez2: , puedes hacer uso del método isalnum para verificar los inputs del usuario.

paulmacguire commented 2 years ago

Hola! Encontré en internet una librería llamada PrettyTable la cual te permite crear tablas de manera muy práctica. Con respecto a esto, ¿hay algún problema con que la ocupe? Vi que dejaron ocupar tabulate() y creo que es como lo mismo, pero pregunto para salir de la duda.

Gracias de antemano! :)

matiasmasjuan commented 2 years ago

Hola @paulmacguire !

Al igual que la librería tabultate, PrettyTable está permitido. Ahora bien, recuerda mencionar en tu README.md el uso de esta librería, para que el ayudante sepa que debe instalarla antes de correr tu programa.

batemanp commented 2 years ago

holaa, entonces si están permitidas esas librerias de tablas mencionadas anteriormente, BeautifulTable también se puede ocupar?:)

matiasmasjuan commented 2 years ago

Hola @beitmank!

Efectivamente, puedes usar BeautifulTable siempre que lo notifiques en tu README.md para que el ayudante corrector no tenga problemas :ok_hand:

Prado408 commented 2 years ago

Hola! Se puede usar el comando ¨break¨en un for o un while?gracias.

matiasmasjuan commented 2 years ago

Hola @Prado408 !

, se puede usar break en un for o while pero intentaría, en la medida de lo posible, de buscar otras alternativas de cerrar ciclos. De todas formas no habrá penalización si lo utilizas.

masoto22 commented 2 years ago

Hola, puedo utilizar las librerías fileinput y sys (no sys.exit), para poder escribir un archivo con una nueva línea (reemplazando una que tenía antes)?

Gracias

TatyFlores commented 2 years ago

Hola, encontré una librería para abrir archivos con encoding, porque no se ejecuta bien las letras y no sé como modificarlo, encontré que con io podría hacerse, pero no sé si está permitido o hay una forma más sencilla de abrir archivos sin que las tildes interfieran? Gracias.

pascualferrer commented 2 years ago

Hola! @Rolivares2 : , puedes hacer uso de los contenidos de excepciones para manejar los inputs del usuario. Ahora bien, debes asegurarte de capturar correctamente los tipos de errores, ya que si usas solamente except Exception será considerado como mala práctica y tendrá penalización.

@FabriRandon : , está permitido el uso de nuevos archivo.py para almacenar valores constantes, como los textos estándares de los menús o aspectos de ese estilo. Ahora bien, hacer uso de otros archivos.txt o similares para almacenar variables temporales estaría prohibido, ya que la idea es que almacenen esas variables a lo largo de la ejecución del programa sin recurrir a archivos externos.

No me queda claro. Puedo realizar un try: junto con un except ValueError?

matiasmasjuan commented 2 years ago

@masoto22 : No, no pueden utilizar librerías externas para manejar archivos. Uno de los objetivos a evaluar en esta tarea es que ustedes sepan manejar la lectura y escritura de archivos con los contenidos aprendidos de cursos anteriores, por lo que no pueden utilizar librerías externas.

@TatyFlores : No, no está permitido el uso de io para modificar los encoding. Recuerda que para esta tarea es obligatorio el uso de encoding utf-8, por lo que no es necesario requerir de librerías externas para realizar esto. Además, si revisas el enunciado de la sección de archivos, notarás que aparece una footnote con ejemplos de uso para leer y escribir archivos mediante utf-8 y así no tener problemas con caracteres especiales:

imagen

imagen

@pascualferrer : Para esta tarea no es necesario que realicen try/except. En el ejemplo que dices, utilizar except ValueError si estaría permitido siempre y cuando realices alguna acción con la excepción y manejes los errores de forma correcta, notificando al usuario de manera descriptiva.

TomLgod commented 2 years ago

Hola, puedo usar la libreria "time" para conseguir la fecha y hora exacta del momento? Que me resulta mas sencillo

matiasmasjuan commented 2 years ago

@TomLgod : No puede utilizar la librería time para obtener directamente la fecha y hora exacta del momento, ya que tanto el enunciado como la Distribución de Puntajes indican que debe ser con datetime. Ahora bien, si luego de obtener la fecha y hora deseas cambiar el formato haciendo uso de otros métodos de la librería time, sí estaría permitido el uso de esa librería.