Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Panic0 en 10 Diciembre 2020, 01:36 am



Título: ¿Esta bien programar de esta forma?
Publicado por: Panic0 en 10 Diciembre 2020, 01:36 am
Hola a todos,ayer tuve un pequeño trabajo practico...después de hacer todo,separe todo por funciones.

Mi pregunta es:¿Esta bien hacerlo de esa forma?

Código:
nombre = []
apellido = []
materia = []
alumnos = {1:nombre,2:apellido,3:materia}




def Altas():
    nombre.append(input("Ingrese el nombre del alumno: "))
    apellido.append(input("Ingrese el apellido del alumno: "))
    materia.append(input("Ingrese la materia: "))
    print(alumnos)

def Bajas():
    print("Esta en bajas")


def Consultas():
    print("Esta en consultas")
    print(alumnos)


def Modificaiones():
    print("Esta en modificaciones")


   


def Menu():
    while True:
       
       
        try:
                print("¿Qué quiere saber?")
                print("1:Altas")
                print("2:Bajas")
                print("3:Consultas")
                print("4:Modificaciones")
                print("5:Salir")
                ele = int(input(": "))
                if ele == 1:
                    Altas()
                elif ele == 2:
                    Bajas()
                elif ele == 3:
                    Consultas()
                elif ele == 4:
                    Modificaiones()
                elif ele == 5:
                    break
                else:
                    print("¡Solo puedes ingresar números del 1 al 5!")
        except ValueError:
            print("Esperaba un numero!")
       
Menu()

 ;)


Título: Re: ¿Esta bien programar de esta forma?
Publicado por: tincopasan en 10 Diciembre 2020, 05:44 am
no hay que ser muy puristas del código, siempre les digo a mis alumnos que si funciona lo que hicieron no está mal.
Si tu código funciona está bien, ahora es cierto que hay convenciones que se usan generalmente y que se trata de usar lo correcto en cada caso.


Código
  1. #-*- coding: utf - 8 -*- #esta línea ahorra problemas con la codificación de caracteres no ingleses
  2. alumnos = {}
  3. #se pueden usar listas individuales pero con un diccionario sobra
  4. #lo ideal sería usar un archivo para guardar los datos y clases para el código, pero como estás aprendiendo así está más que bien.
  5.  
  6. def Altas():
  7.    clave= len(alumnos) #para que la clave se auto incremente
  8.    nombre = input("Ingrese el nombre del alumno: ")
  9.    apellido =input("Ingrese el apellido del alumno: ")
  10.    materia = input("Ingrese la materia: ")
  11.    alumnos[clave + 1] = [nombre,apellido,materia] # una lista con los datos y como clave el número
  12.    # en un futuro la clave puede ser el número de documento, ya que estos son únicos
  13.  
  14. def Bajas():
  15.    return "Está en bajas" #cuando se devuelve un valor cualquiera se estila usar return
  16.  
  17.  
  18. def Consultas():
  19.    print("Está en consultas \n")
  20.    for k,v in alumnos.items():
  21.        print(f"Número del alumno: {k} Nombre: {v[0]} Apellido: {v[1]} Materia: {v[2]}")
  22.  
  23.  
  24. def Modificaiones():
  25.    print("Está en modificaciones")
  26.  
  27. def Menu():
  28.  
  29.    while True:
  30.  
  31.        print("""¿Qué quiere saber? \n
  32. 1:Altas
  33. 2:Bajas
  34. 3:Consultas
  35. 4:Modificaciones
  36. 5:Salir""")
  37.        #en multileneas por lo general se muestran así, con un solo print
  38.        try:
  39.            ele = int(input("\nOpción: ")) #normalmente se usa el try solo para lo que queremos evaluar
  40.        except ValueError:
  41.            print("Esperaba un número!")
  42.            Menu()
  43.        if ele == 1:
  44.            Altas()
  45.        elif ele == 2:
  46.            print(Bajas())
  47.        elif ele == 3:
  48.            Consultas()
  49.        elif ele == 4:
  50.            Modificaiones()
  51.        elif ele == 5:
  52.            print("Gracias por usar el sistema")
  53.            break
  54.        else:
  55.            print("¡Solo puedes ingresar números del 1 al 5!")
  56.       #cuando hay tantos elif también se puede simplificar con el uso de diccionarios    
  57.  
  58. if __name__ == '__main__': #para más adelante es mejor está forma de iniciar el módulo
  59.    Menu()
  60.  
  61.  


ya se que te molesta lo que te digo, pero vas aprendiendo y te muestro otras formas, no por eso son mejores, pero si más estandar.


Título: Re: ¿Esta bien programar de esta forma?
Publicado por: Panic0 en 10 Diciembre 2020, 18:15 pm
no hay que ser muy puristas del código, siempre les digo a mis alumnos que si funciona lo que hicieron no está mal.
Si tu código funciona está bien, ahora es cierto que hay convenciones que se usan generalmente y que se trata de usar lo correcto en cada caso.


Código
  1. #-*- coding: utf - 8 -*- #esta línea ahorra problemas con la codificación de caracteres no ingleses
  2. alumnos = {}
  3. #se pueden usar listas individuales pero con un diccionario sobra
  4. #lo ideal sería usar un archivo para guardar los datos y clases para el código, pero como estás aprendiendo así está más que bien.
  5.  
  6. def Altas():
  7.    clave= len(alumnos) #para que la clave se auto incremente
  8.    nombre = input("Ingrese el nombre del alumno: ")
  9.    apellido =input("Ingrese el apellido del alumno: ")
  10.    materia = input("Ingrese la materia: ")
  11.    alumnos[clave + 1] = [nombre,apellido,materia] # una lista con los datos y como clave el número
  12.    # en un futuro la clave puede ser el número de documento, ya que estos son únicos
  13.  
  14. def Bajas():
  15.    return "Está en bajas" #cuando se devuelve un valor cualquiera se estila usar return
  16.  
  17.  
  18. def Consultas():
  19.    print("Está en consultas \n")
  20.    for k,v in alumnos.items():
  21.        print(f"Número del alumno: {k} Nombre: {v[0]} Apellido: {v[1]} Materia: {v[2]}")
  22.  
  23.  
  24. def Modificaiones():
  25.    print("Está en modificaciones")
  26.  
  27. def Menu():
  28.  
  29.    while True:
  30.  
  31.        print("""¿Qué quiere saber? \n
  32. 1:Altas
  33. 2:Bajas
  34. 3:Consultas
  35. 4:Modificaciones
  36. 5:Salir""")
  37.        #en multileneas por lo general se muestran así, con un solo print
  38.        try:
  39.            ele = int(input("\nOpción: ")) #normalmente se usa el try solo para lo que queremos evaluar
  40.        except ValueError:
  41.            print("Esperaba un número!")
  42.            Menu()
  43.        if ele == 1:
  44.            Altas()
  45.        elif ele == 2:
  46.            print(Bajas())
  47.        elif ele == 3:
  48.            Consultas()
  49.        elif ele == 4:
  50.            Modificaiones()
  51.        elif ele == 5:
  52.            print("Gracias por usar el sistema")
  53.            break
  54.        else:
  55.            print("¡Solo puedes ingresar números del 1 al 5!")
  56.       #cuando hay tantos elif también se puede simplificar con el uso de diccionarios    
  57.  
  58. if __name__ == '__main__': #para más adelante es mejor está forma de iniciar el módulo
  59.    Menu()
  60.  
  61.  


ya se que te molesta lo que te digo, pero vas aprendiendo y te muestro otras formas, no por eso son mejores, pero si más estandar.

Wow bien bien,aun hay cosas que no entiendo bien lo que hacen...Pero esa es la idea aun estoy aprendiendo...las voy a revisar mas a detalle en un futuro.

Muchas gracias por responder y explicarme.

Que tengas un excelente día u noche! <3



Título: Re: ¿Esta bien programar de esta forma?
Publicado por: tincopasan en 10 Diciembre 2020, 19:56 pm
lo que no entiendas pregunta.


Título: Re: ¿Esta bien programar de esta forma?
Publicado por: Danielㅤ en 11 Diciembre 2020, 00:16 am
Hola, el código está bien, pero estas usando muchas funciones, y las mismas las tenés que usar únicamente cuando sea necesario, además usar una función para solamente imprimir un texto/dato me parece un poco exagerado, las funciones sirven para procesar varias o muchas cosas sin repetirlas en todo el código, o también se las utiliza para ahorrar/reducir código, pero para lo que generalmente sirven es para facilitar las tareas, ya que por ejemplo llamándolas y pasándoles argumentos, éstas devuelven o hacen lo que queremos que hagan pero tan solo usando una instrucción que es la llamada a la función.


Saludos


Título: Re: ¿Esta bien programar de esta forma?
Publicado por: @XSStringManolo en 11 Diciembre 2020, 15:11 pm
Yo opino todo lo contrario a vosotros a cerca de que el código no debe ser puro. A más puro, más funcionalidades es capaz de realizar la función, más seguro, reusable en otros programas, código mucho más corto, código más legible, más fácil de portar, fácil de mantener o modificar.

Lo contrario a código puro suele ser spagetti.

Modifiqué un poco el código para simplificarlo, separar la lógica y quitar cosas que consideré innecesarias o feas.
También que las funciones puedan usar cualquier diccionario que se le pase como argumento, no solo alumnos.

Código
  1. #-*- coding: utf - 8 -*-
  2.  
  3. def altas(alumnos):
  4.    alumnos[len(alumnos) + 1] = [input("Ingrese el nombre del alumno: "),
  5.    input("Ingrese el apellido del alumno: "),
  6.    input("Ingrese la materia: ")
  7.    ]
  8.  
  9. def bajas():
  10.    print("Está en bajas")
  11.  
  12. def consultas(alumnos):
  13.    print("Está en consultas \n")
  14.    for k,v in alumnos.items():
  15.        print(f"Número del alumno: {k} Nombre: {v[0]} Apellido: {v[1]} Materia: {v[2]}")
  16.  
  17. def modificaciones():
  18.    print("Está en modificaciones")
  19.  
  20. def salir():
  21.    print("Gracias por usar el sistema")
  22.    exit()
  23.  
  24. def menu():
  25.        print("""¿Qué quiere saber?
  26.  
  27. 1:Altas
  28. 2:Bajas
  29. 3:Consultas
  30. 4:Modificaciones
  31. 5:Salir
  32. """)
  33.        option = input("Seleccione una opción\n> ")
  34.        return (option.isdigit() and int(option))
  35.  
  36. if __name__ == '__main__':
  37.    alumnos = {}
  38.    while 1:
  39.      option = menu()
  40.      option == 1 and altas(alumnos)
  41.      option == 2 and bajas()
  42.      option == 3 and consultas(alumnos)
  43.      option == 4 and modificaciones()
  44.      option == 5 and salir()


Título: Re: ¿Esta bien programar de esta forma?
Publicado por: tincopasan en 11 Diciembre 2020, 18:58 pm
XSStringManolo muy purista del código pero las funciones sin return, vaya contradicción.


Título: Re: ¿Esta bien programar de esta forma?
Publicado por: @XSStringManolo en 12 Diciembre 2020, 02:12 am
XSStringManolo muy purista del código pero las funciones sin return, vaya contradicción.

Modifiqué el tuyo porque me parecía bastante feo, no hice el mío de 0. Por eso no usa funciones puras.



Título: Re: ¿Esta bien programar de esta forma?
Publicado por: tincopasan en 12 Diciembre 2020, 03:40 am
partamos de la base que no es el mío, y si lo fuese, modifica el de otro, no te pedí ninguna corrección ni lo haría, ya vi que tipo de desarrollador sos.


Título: Re: ¿Esta bien programar de esta forma?
Publicado por: @XSStringManolo en 12 Diciembre 2020, 04:45 am
partamos de la base que no es el mío, y si lo fuese, modifica el de otro, no te pedí ninguna corrección ni lo haría, ya vi que tipo de desarrollador sos.
Si no aceptas que otros tengan otros puntos de vista mal vamos.

Contesté al usuario dando mi opinión sobre consejos que le diste que no me parecieron sensatos. Si cada vez que discrepe en algo contigo me vas a atacar, hazlo por privado.


Título: Re: ¿Esta bien programar de esta forma?
Publicado por: tincopasan en 12 Diciembre 2020, 11:01 am
1) que opines distinto no me preocupa en lo más mínimo, De ahí  a decir que es feo o no sensato, solo es distinto en todo caso .De la misma  forma opino que sos inchorerente , decís una cosa y haces otra.
2)¿me querés manejar la vida diciendome que debo hacer? "mal vamos"


Título: Re: ¿Esta bien programar de esta forma?
Publicado por: #!drvy en 12 Diciembre 2020, 13:18 pm
¿Nos calmamos un poco y dejamos de desviar el tema?

Saludos