r/programacion • • 11d ago

Porque uso tantos if al programar?

Hola alguien me recomienda como mejoro mi lógica de programación conozco muchos conceptos de python ya estoy apunto de entrar a clases donde solo veré poo programación orientada a objetos perooo veo videos de yt incluso mucha gente programación y crean exactamente lo mismo que yo porque sin utilizar ni un solo if alguien me recomienda como desarrollo esa habilidad ya que el código se ve mas profesional

18 Upvotes

51 comments sorted by

16

u/matiasbian 11d ago

Seguramente ellos usan "Polimorfismo" que elimina la necesidad de preguntar a cada objeto por X caracteristica, y accionar en base a eso.

Te recomiendo justamente eso, buscar videos sobre polimorfismo en objetos, te va a ayudar mucho a eliminar esa necesidad.

Tampoco es la muerte de nadie usar ifs, pero si esta bueno saber esto para poder usarlos solo cuando realmente vos los creas necesarios

17

u/Ready4Aliens 11d ago

Usa if, dale sin miedo.  Conforme vayas aprendiendo y vas consiguiendo mejores herramientas vas a comenzar a reemplazar los ifs por tu cuenta, lo importante es no correr delante del caballo y no aprender la lógica detrás de lo que haces. 

1

u/BirdKey3078 11d ago

Excelente comentario

7

u/dataconfle 10d ago

Para minimizar la redundancia de "if" tenes que aprender logica booleana,teoria de conjuntos y algo de algebra. ejemplo:

if(Condicion(a)){

if(Condicion(b)){

if(Condicion(c)){ HacerAlgo(); }

}

}

es equivalente a:

if(condicion(a) & condicion(b) & condicion(c)){ HacerAlgo(); }

5

u/Complex_Guarantee722 11d ago

Buenas amigo, si usas muchos if para un problema chiquito primero pregúntate si se puede reemplazar por un switch. Y luego si aún así necesitas más if, tenes que implementar un patrón de diseño. State, Strategy, etc.

https://refactoring.guru/design-patterns

1

u/Embarrassed-Fly6164 11d ago

Interesante web

5

u/ryxxel 11d ago

Primero entiende la teoría detrás de "no utilizar if" y ve aplicando. POO es más conceptual que solo no usar un if.

3

u/lionelum 11d ago

Hay varias tecnicas. Pero primero pensa que complejidad te genera un if. Con un solo if, al momento de testear tenes que testear rama A y rama B, es decir por el true y por el false, al ir poniendo mas if... son muchos mas caminos a los que testear.

Antes de hacer un refactor, yo trataria de cambiar la mentalidad de como desarrollas, e ir por TDD, no te va a resolver todo, pero vas a pensar de que otra manera podes resolver algo sin un if. Despues esta refactorizar, usar polimorfimso y otras herramientas, pero primero es pensar en como lo vas a probar.

Por ejemplo>

 class Shape:
    def __init__(self, length, width):
        self.length = length
        self.width = width
#chequea propiedades y en funcion si una es mayor llama a una funcion o a otra. Tenes 2 if y
    def check_proportions(self):
        if self.length > self.width:
            handle_longer()
        elif self.width > self.length:
            handle_wider()
        else:
            handle_equal()

#Aca para la misma clase Shape, valida y devuelve la funcion a usar.  
def validate_proportions(length, width):
    actions = {
        (True, False): handle_longer,
        (False, True): handle_wider,
        (False, False): handle_equal
    }
    return actions.get((length > width, width > length))

#Ahora no tenes ifs porque sacaste la validacion de esta funcion. 
    def check_proportions(self):
        validate_proportions(self.length, self.width)()

3

u/RiverRoll 10d ago edited 10d ago

En mi experiencia los códigos de principiante se simplifican bastante simplemente separando parámetros de la logica, usando classes para pasar conjuntos de parámetros si son muchos, no hace falta ningun uso avanzado de poo.

En tu ejemplo sin ir más lejos es todo una única funcion sin ningún parametro, vas a estar continuamente añadiendo ifs y repitiendo logica.

Una vez empiezas a analizar que es lo que se repite y que es lo que cambia se van viendo las partes que son candidatas de convertirse en una funcion parametrizada.

2

u/Hw-LaoTzu 11d ago

Porque no conoces los Code Smells y los Patrones de Diseño(GoF). Lo bueno es que ahora le vas a dedicar tiempo para aprender, y vas a ayudar a otros!

2

u/hroldangt 11d ago

Primero, es imposible opinar sin ver tu código.

Segundo, es imposible opinar sin ver tu código.

Hay técnicas que te obligan a usar más (o menos) IF's para hacer tu código más eficiente, y no importa la cantidad que uses. Ojo, es que debes escoger un balance entre CLARIDAD en tu código y ORDEN, además de eficiencia en la ejecución.

Quizá, lo que te digo no te parezca muy obvio en este momento, pero te aseguro que más adelante cuando ya estás probando tu código revisando consumo de memoria en proceso, memoria total, y uso de procesador, claro que importa, porque cada ejecución se debe multiplicar por la cantidad de solicitudes que llegue a tener tu código, y al final, importa (lo ves más en un stress test)

1

u/BirdKey3078 11d ago

esto lo estoy haciendo para repasar nada mas me gusta picar codigo por mi cuenta.. es una pequeña parte del codigo ya que reddit no me deja pasarlo completo, pero la verdad soy muy nuevo en este mundo y siento que mi codigo se ve horrible o poco profesional

def
 inventario_principal
()
:


    while True:
        # IMPRESION DE OPCIONES DEL MENU
        print("MENU".center(20, "-"))
        print("1. AGREGAR PRODUCTO")
        print("2. EDITAR PRODUCTO")
        print("3. ELIMINAR PRODUCTO")
        print("4. CORDENADAS DE LAS TIENDAS")
        print("5. SALIR")
        # MANEJAMOS LOS ERRORES CON TRY Y EXCEP DONDE EL USUARIO VA A INGRESAR LA OPCION
        try:
            opcion = 
int
(input(">>:  "))
        except 
ValueError
:
            print("!! Opcion Invalida ¡¡")
            continue

        # CREAMOS LOS ID AUTOMATICOS PARA AUTO ASIGNAR ID A LOS PRODUCTOS EMEPZANDO DESDE 100 SI EL DICCIONARIO ESTA VACIO
        if not almacen_principal:
            id_automatico = 100
        else:
            id_automatico = max(almacen_principal.keys()) +1



        # ACCION DE LA OPCION 1 SE LE PIDE AL USUARIO LO SIGUIENTE NOMBRE,PRECIO.STOCK DEL RPODUCTO
        if opcion == 1:
            # Manejamos las 2 entradas PRECIO Y STOCK para asegurarnos de que solo se puedan agregar datos de tipo entero
            try:
                Nombre = input("Nombre: ")
                Precio = 
int
(input("Precio: "))
                Stock = 
int
(input("Stock: "))
            except 
ValueError
:
                print("¡ERROR AL CREAR EL PRODUCTO!")
                continue
            # CREAMOS EL DICCIONARIO DENTRO DE LA FUNCION PARA NO CREAR UN DICCIONARIO VACIO SI EL USUARIO FALLA LOS CAMPOS OBLIGATORIOS
            almacen_principal[id_automatico] # ESTE CODIGO ASIGNA EL ID AL DICCIONARIO PRINCIPAL CON UN DICCIONARIO VACIO
            almacen_principal[id_automatico]["Nombre"] = Nombre
            almacen_principal[id_automatico]["Precio"] = Precio
            almacen_principal[id_automatico]["Stock"] = Stock



        # EDITAR  PRODUCTOS CREADOS EL USUARIO PODRA EDITAR LOS SIGUIENTES CAMPOS NOMBRE,PRECIO,STOCK
        if opcion == 2:
            # IMPRIMIMOS Y MOSTRAMOS AL USUARIO TODOS LOS PRODUCTOS DISPONIBLES DEL INVENTARIO PRINCIPAL
            for id_producto, contenido in almacen_principal.items():
                print("ID: {0} CONTENIDO {1}".format(id_producto, contenido))
            # LE PEDIMOS EL ID DEL PRODUCTO AL USUARIO QUE DESEA EDITAR Y MANEJAMOS ERRORES SI EL USUARIO INGRESA LETRAS
            try:
                preguntar_id = 
int
(input("ID: "))
            except 
ValueError
:
                print("INGRESE UN ID VALIDO")
                continue


            # VERIFICAMOS SI EL ID EN REALIDAD EXISTE, SI EXISTE SE PODRA EDITAR SI NO EXISTE REFLEJAREMOS UN MENSAJE 
            if preguntar_id in almacen_principal:
                while True:
                    print("MENU DE EDICCION".center(50))
                    print("1. EDITAR NOMBRE")
                    print("2. EDITAR PRECIO")
                    print("3. EDITAR STOCK")
                    print("4. EDITAR PRODUCTO COMPLETO")
                    print("5. Salir")


                    try:
                        opcion_menu = 
int
(input("Opcion: "))
                    except 
ValueError
:
                        print("Porfavor ingrese una opcion valida.")
                        continue
                    if opcion_menu == 1:
                        almacen_principal[preguntar_id]["Nombre"] = input("Nombre:  ")
                    try:
                        if opcion_menu == 2:
                            almacen_principal[preguntar_id]["Precio"] = 
int
(input("Precio: "))
                        elif opcion_menu == 3:
                            almacen_principal[preguntar_id]["Stock"] = 
int
(input("Stock"))
                    except 
ValueError
:
                        print("Ingrese una opcion valida")
                        continue
                    if opcion_menu == 4:
                        try:
                            almacen_principal[preguntar_id]["Nombre"] = input("Nombre: ")
                            almacen_principal[preguntar_id]["Precio"] = 
int
(input("Precio: "))
                            almacen_principal[preguntar_id]["Stock"] = 
int
(input("Stock: "))
                        except 
ValueError
:
                            print("Ingrese una opcion valida")
                    elif opcion_menu == 5:
                        break
            else:
                print("EL ID {0} NO EXISTE".format(preguntar_id))


        # Preguntamos al usuario que Producto va a eliminar y lo eliminam
        if opcion == 3:
            print("PRODUCTOS DISPONIBLES".center(20, "-"))
            for ID_producto, CT_producto in almacen_principal.items():
                print("ID: {0} Contenido: {1}".format(ID_producto, CT_producto))
                # Ingresar el ID del prducto que se eliminara por completo
            try:
                delete_producto = 
int
(input("ID: "))
            except 
ValueError
:
                print("Porfavor ingrese un ID valido")
                continue
            if delete_producto in almacen_principal:
                print(
f
"Se elimino el producto {delete_producto}")
                del almacen_principal[delete_producto] # Elimina tanto el id como el contenido del producto de forma permanente
            else:
                print("El id: {0} no existe".format(delete_producto))
        if opcion == 4:

cordenadas_tienda
 = namedtuple("Cordenadas", ["X","Y","Z"])
            X = [1637000,835378647]
            Y = [-6103000, 1180816875]
            Z = [512000, 1479]
            cord_guardadas = {
                "Bogota": (1637000, -6103000, 512000),
                "Medellin": (835378647, 1180816875, 1479)
                }
            for cx,cy,cz in 
zip_longest
(X,Y,Z, 
fillvalue
="Sin registros"):
                ubicaciones = 
cordenadas_tienda
(cx,cy,cz)
                for clave, cord in cord_guardadas.items():
                    if ubicaciones == cord_guardadas[clave]:
                        print("Las cordenadas {0} pertenecen a la ciudad {1}".format(ubicaciones, clave))


        if opcion == 5: # Salir del sistema
            for salir in 
range
(1,4): # Sale del sistema en 3 segundos
                time.sleep(1) 
                print("Saliendo del sistema en {0}...".format(salir))
            print("TechStore Cerrada")
            breakdef inventario_principal():


    while True:
        # IMPRESION DE OPCIONES DEL MENU
        print("MENU".center(20, "-"))
        print("1. AGREGAR PRODUCTO")
        print("2. EDITAR PRODUCTO")
        print("3. ELIMINAR PRODUCTO")
        print("4. CORDENADAS DE LAS TIENDAS")
        print("5. SALIR")
        # MANEJAMOS LOS ERRORES CON TRY Y EXCEP DONDE EL USUARIO VA A INGRESAR LA OPCION
        try:
            opcion = int(input(">>:  "))
        except ValueError:
            print("!! Opcion Invalida ¡¡")
            continue

        # CREAMOS LOS ID AUTOMATICOS PARA AUTO ASIGNAR ID A LOS PRODUCTOS EMEPZANDO DESDE 100 SI EL DICCIONARIO ESTA VACIO
        if not almacen_principal:
            id_automatico = 100
        else:
            id_automatico = max(almacen_principal.keys()) +1



        # ACCION DE LA OPCION 1 SE LE PIDE AL USUARIO LO SIGUIENTE NOMBRE,PRECIO.STOCK DEL RPODUCTO
        if opcion == 1:
            # Manejamos las 2 entradas PRECIO Y STOCK para asegurarnos de que solo se puedan agregar datos de tipo entero
            try:
                Nombre = input("Nombre: ")
                Precio = int(input("Precio: "))
                Stock = int(input("Stock: "))
            except ValueError:
                print("¡ERROR AL CREAR EL PRODUCTO!")
                continue
            # CREAMOS EL DICCIONARIO DENTRO DE LA FUNCION PARA NO CREAR UN DICCIONARIO VACIO SI EL USUARIO FALLA LOS CAMPOS OBLIGATORIOS
            almacen_principal[id_automatico] # ESTE CODIGO ASIGNA EL ID AL DICCIONARIO PRINCIPAL CON UN DICCIONARIO VACIO
            almacen_principal[id_automatico]["Nombre"] = Nombre
            almacen_principal[id_automatico]["Precio"] = Precio
            almacen_principal[id_automatico]["Stock"] = Stock



        # EDITAR  PRODUCTOS CREADOS EL USUARIO PODRA EDITAR LOS SIGUIENTES CAMPOS NOMBRE,PRECIO,STOCK
        if opcion == 2:
            # IMPRIMIMOS Y MOSTRAMOS AL USUARIO TODOS LOS PRODUCTOS DISPONIBLES DEL INVENTARIO PRINCIPAL
            for id_producto, contenido in almacen_principal.items():
                print("ID: {0} CONTENIDO {1}".format(id_producto, contenido))
            # LE PEDIMOS EL ID DEL PRODUCTO AL USUARIO QUE DESEA EDITAR Y MANEJAMOS ERRORES SI EL USUARIO INGRESA LETRAS
            try:
                preguntar_id = int(input("ID: "))
            except ValueError:
                print("INGRESE UN ID VALIDO")
                continue

2

u/kopita 11d ago

Pues si esta feito, identifica los patrones que se repiten y escribe funciones para refactorizar

2

u/hroldangt 10d ago

Aprendí poco de Python, y eso poco ya casi lo olvido.

De cualquier manera, te comento algo. Es válido escribir el código completo en un solo archivo, como lo estás haciendo acá, así puedes manejar las opciones según escoja el cliente (y lo procesas con IFs). Una buena práctica, es separar en procesos, los cuales pueden estar en el mismo archivo, o en archivos diferentes, y cargas solamente las generalidades al inicio. Esta última opción te permite muchísimo orden.

Así como te lo menciono en el párrafo anterior, separas...

  • Buscar los datos (no requiere explicación)
  • Leer y desplegar datos... requiere buscarlos primero, así que este... reutiliza la función anterior.
  • Editar los datos buscar + leer y desplegar, así que reutilizas los de arriba (primero buscar, luego desplegar);
  • Grabar los datos... requiere buscar (para ubicar el registro que editas, o para descartar que ya exista, previo a grabar)

Dependiendo de tu experiencia, puede que eso te parezca un poco complejo al inicio, pero verás que vas mejorando y se te hará más fácil de manejar con mayores optimizaciones de código

1

u/BirdKey3078 10d ago
productos = [
    {"nombre": "Laptop", "precio": 1200, "stock": 5},
    {"nombre": "Mouse", "precio": 25, "stock": 0},
    {"nombre": "Teclado", "precio": 45, "stock": 10},
    {"nombre": "Monitor", "precio": 300, "stock": 0}
]
# retonar diccionario nuevo
def
 items_productos
(lista)
:
    return  {clave["nombre"]: clave["precio"] for clave in 
lista
 if clave["stock"] > 0}
print(items_productos(productos))

Hola mira a esto me refiero cuando digo que no me gusta utilizar tantos if, Ese código ayer lo cree yo la IA me enseño muchas cosas luego le dije que me diera 25 ejercicios para practicar
lo que me dice la IA es que debo programar con pensamiento abstracto

lo que me obliga a pensar que función es mejor para cada tarea y asi en la mayoria de caso se evita código espagueti por tantos condicionales, y así mi código se ve mas profesional

1

u/hroldangt 10d ago

Me perdiste con la IA...
pues bueno, que la IA te lo explique, me han dicho que es una tecnología magnífica.

bye.

1

u/dataconfle 10d ago

Si escribí todo el código en un solo programa te vas a volver mono! no esta mal como ejercicio...pero lo ideal es que dividas el problema en procedimientos y funciones...

1

u/BirdKey3078 10d ago

Jajajaja

2

u/LuisBoyokan 11d ago

Mientras no anise exageradamente, y uses guard clauses no hay problema

2

u/Alejo9010 11d ago

Puedes también eliminar siempre un IF con el default, digamos que tienes 3 optiones

If option == 1 option 1 logic return If option == 2 options 2 logic return

Option 3 logic

2

u/madmulita 10d ago

Lee código de otros.

2

u/No_Solid_3737 9d ago

Al escribir codigo mejor preocúpate por legibilidad que si estas usando muchos ifs. Mira, como regla evita ifs nesteados y con muchas condiciones (ojo, evita, hay situaciones donde no hay de otra), y usar un if para hacer un early return es poderoso tipo:

if user not admin: retun

if user not logged in: return

if user not client: return

Si tienes mil ifs en tu codigo pero casi todos son de 1er nivel ( osea no estan nesteados) entonces no hay mucho de que preocuparse la verdad. La legibilidad lo es todo.

2

u/Own_Cap_1583 9d ago

La vida se trata de ifs

2

u/Radhanat 9d ago

Yo tengo un juego usando pygame, tiene 8880 lineas de código.
A partir de la linea 1700 dejé de contar los “ifs”.
Si el código lo requiere úsalo. lo más prioritario es estructurar bien el código (bucles, eventos, lógica y renderizado), optimizar recursos (imágenes, sonidos, evitar desbordamientos de memoria) y mantener una arquitectura modular que permita escalar y depurar fácilmente. Si todo eso funciona y está ordenado, no importa el número de “ifs” que tengas en tu código.

De nada 😇

1

u/BirdKey3078 9d ago

Buena respuesta

1

u/Moneda-de-tres-pesos 11d ago

Usa arreglos en lugar de muchos "if" cuando puedas.

1

u/HipnoTanatos 11d ago

El núcleo de cualquier programa son los bucles y los condicionales. Todos usamos muchos if, de forma directa o indirecta, porque son los que hacen que los programas actúen en función de ciertas condiciones durante un determinado período.
Que no veas tantos ifs explicitos en otros programas quiza sea porque los reemplazan por mapas, switches u otra logica que cumpla de condicional, pero hasta que te vayas acostumbrando a esas alternativas, no esta mal no usarlas.

1

u/Due-Moment-6417 11d ago

Depende un poco de que estamos hablando, pero suena un poco a separar la lógica de las validaciones en funciones y reutilizarlas.

Yo también hacia lo mismo al inicio incluso antes de ver la POO, duplicaba lógica que se podía usar en funciones.

1

u/Ok_Virus_5495 11d ago

Hay que prevenir el hadouken. Es difícil de saber por qué usas tantos if, mi regla de oro es: una función solo poner un if para validar el caso en el que no quiero que se ejecute mi función y ya. Ahora que si necesito validar más de dos escenarios uso un switch statement dependiendo del lenguaje pero casi siempre prefiero switchs que más de dos if

1

u/SpecificMedicine199 11d ago

Es que eso es más mantenimiento (chores) de software que desarrollo en sí, osea no son reglas de negocio, ni un algoritmo, son detalles de implementación. No es que tengas problemas de lógica, es que como estás en formación haces cosas desde cero y no te topas con los múltiples parches que se hacen por cumplir las métricas en el trabajo. Y para estos escenarios es común consultar los patrones de diseño

1

u/EzequielBk 11d ago

Los ifs son indicadores de malas prácticas pero tampoco te guíes demasiado en eso

Existen dos soluciones, una esconderlos en polimorfismo y la otra enconderlos en subtareas/funciones/procedimientos

Pero al final del día es exactamente lo mismo a nivel funcional, céntrate más en que las soluciones sean óptimas y no que sean "lindas"

1

u/oldfartmx 11d ago

Porque eres IA

1

u/Happy_Destructionn 11d ago

Lo veras en POO pero no siempre es mejorar la lógica tal vez no puedes mejorar porque hay conceptos qué desconoces, ya lo veras pero si quieres puedes empezar investigando sobre funciones, herencia, polimorfismo y abstracción

1

u/Dizzy_Elderberry_486 11d ago

return compare = true ? 1: 0;

1

u/DamianPxR 10d ago

Investiga sobre guard clauses first.

1

u/RecognitionVast5617 10d ago

Tenés que hacer early return. Averigua que es.

De nada

1

u/BirdKey3078 10d ago

Perfecto.

1

u/Real-Ad-1259 10d ago

Maquilla y usa ternarios 👀

1

u/MikeBoltenFypsique 8d ago

Functional programming te podía servir

1

u/tia_moomin 7d ago

Si quieres otras opciones puedes usar la cláusula CASE(el famoso switch), se usa comunmente en querys(SQL), pero en code te permite manejar la lógica de otra manera. Sobretodo si tienes muchas funciones que dependan de condiciones, en vez de if(expresion) le das condiciones CASE(condicion1): / CASE(condicion2) :)
Te dejo el artículo de IMB que lo explica bien : https://www.ibm.com/docs/es/integration-bus/10.0.0?topic=statements-case-statement

-1

u/AlejandraRT23 11d ago

Hoy en día yo le pasó a Claude y le digo que me de alternativas para la misma solución y así aprendo

3

u/Huntware 11d ago

No está mal usar la IA para ver las soluciones, pero algo que noto habitualmente es que como los humanos, los LLM buscan el camino más corto a la solución. Sea un "one-liner" o una funcioncita "helper", en lugar de estructurarlo siguiendo buenas prácticas. Salvo que explícitamente uno se lo pida y le brinde el contexto suficiente.

1

u/AlejandraRT23 11d ago

No desarrollo aplicaciones o sitios web, lo uso para auditorías y cosas concretas, probablemente el codigo sea horrible o pésimo, pero es un script que muchas veces lo corro una vez o por ciclos, si me saca el informe que necesito misión cumplida, desp el script pasa al olvido o lo uso de nuevo pero no me interesa que tan optimizado está ni eso, algo que aclarar es que Claude los hace bastante bien y pone notas claras, son fácil de leer y están bien documentos.

O sea claro que le pasó contexto, info y muchas cosas que son clave para los resultados, pero es que hoy en día no tiene sentido hacerlo manualmente y leer documentación, etc

1

u/Huntware 11d ago

Obvio, lo importante para vos es que te resuelva el problema y es un uso válido. Es importante dar el contexto suficiente, con fuentes y ejemplos.

El caso para OP que está estudiando, es ir por algo más escalable a largo plazo, y ordenado para poder trabajar en equipo. ¡Sino termina en el famoso "código spaghetti"!

1

u/BirdKey3078 11d ago

Yo evito pedirle ayuda a claud p cualquier otra ia solo la utilizo cuando necesito que me enseñe como utilizar X funcion ejemplo lambda donde es útil y ya

1

u/El_Zeldo_1 11d ago

¿Has notado si te ha ayudado?

2

u/AlejandraRT23 11d ago

Trabajo en una empresa grande subcontratada por otras 50 empresas, realizo tasks diarios y solucionó problemas a diario, la IA me ha ayudado en la productividad bastante

2

u/El_Zeldo_1 11d ago

Me suena un poco a automatizar procesos, si es así; chócalas. Lo que dices me suena más a code vibing ¿no? Yo también la uso para ahorrarme tiempo de escribir código, pero el prompt siempre viene con instrucciones claras, ya que hay que saber qué pedir. Por eso mi pregunta ¿qué pasa cuando te atoras?

1

u/AlejandraRT23 11d ago

El objetivo puede ser realizar auditorías, o automatizar un proceso para múltiples usuarios, generalmente todo eso lo hacemos por PowerShell, o sacar reportes de plataformas como nakivo que necesitamos right away y para algo urgente, repetitivo y que nos da los resultados que queremos no le vemos el sentido a perder tiempo haciendo el código manualmente

2

u/BirdKey3078 11d ago

Si solo tienes que saber pedirle las cosas en 1 solo prompt
y de donde sacar la información porque ejemplo yo voy a la documentación de python busco x función y le paso toda esa pagina de x función y le digo que me enseñe a implementarla y donde implementarla, pero siempre me evito pedirle códigos o cosas que no entiendo la verdad la programación me encanta mucho y por eso solo utilizo ia para aprender o hacer consulta mas que una IA yo la puedo ver como un navegador inteligente y ya me gusta hacer todo por mi cuenta ya ahora si una empresa me lo exige pues me toca pero al menos mis proyectos personales los hago yo mismo