¿Esta bien programar de esta forma?

Iniciado por Panic0, 10 Diciembre 2020, 01:36 AM

0 Miembros y 1 Visitante están viendo este tema.

Panic0

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?

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()


;)
Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.

tincopasan

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 (python) [Seleccionar]
#-*- coding: utf - 8 -*- #esta línea ahorra problemas con la codificación de caracteres no ingleses
alumnos = {}
#se pueden usar listas individuales pero con un diccionario sobra
#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.

def Altas():
   clave= len(alumnos) #para que la clave se auto incremente
   nombre = input("Ingrese el nombre del alumno: ")
   apellido =input("Ingrese el apellido del alumno: ")
   materia = input("Ingrese la materia: ")
   alumnos[clave + 1] = [nombre,apellido,materia] # una lista con los datos y como clave el número
   # en un futuro la clave puede ser el número de documento, ya que estos son únicos

def Bajas():
   return "Está en bajas" #cuando se devuelve un valor cualquiera se estila usar return
   

def Consultas():
   print("Está en consultas \n")
   for k,v in alumnos.items():
       print(f"Número del alumno: {k} Nombre: {v[0]} Apellido: {v[1]} Materia: {v[2]}")


def Modificaiones():
   print("Está en modificaciones")

def Menu():
   
   while True:
       
       print("""¿Qué quiere saber? \n
1:Altas
2:Bajas
3:Consultas
4:Modificaciones
5:Salir""")
       #en multileneas por lo general se muestran así, con un solo print
       try:
           ele = int(input("\nOpción: ")) #normalmente se usa el try solo para lo que queremos evaluar
       except ValueError:
           print("Esperaba un número!")
           Menu()
       if ele == 1:
           Altas()
       elif ele == 2:
           print(Bajas())
       elif ele == 3:
           Consultas()
       elif ele == 4:
           Modificaiones()
       elif ele == 5:
           print("Gracias por usar el sistema")
           break
       else:
           print("¡Solo puedes ingresar números del 1 al 5!")
      #cuando hay tantos elif también se puede simplificar con el uso de diccionarios    
       
if __name__ == '__main__': #para más adelante es mejor está forma de iniciar el módulo
   Menu()
   



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.

Panic0

Cita de: 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 (python) [Seleccionar]
#-*- coding: utf - 8 -*- #esta línea ahorra problemas con la codificación de caracteres no ingleses
alumnos = {}
#se pueden usar listas individuales pero con un diccionario sobra
#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.

def Altas():
   clave= len(alumnos) #para que la clave se auto incremente
   nombre = input("Ingrese el nombre del alumno: ")
   apellido =input("Ingrese el apellido del alumno: ")
   materia = input("Ingrese la materia: ")
   alumnos[clave + 1] = [nombre,apellido,materia] # una lista con los datos y como clave el número
   # en un futuro la clave puede ser el número de documento, ya que estos son únicos

def Bajas():
   return "Está en bajas" #cuando se devuelve un valor cualquiera se estila usar return
   

def Consultas():
   print("Está en consultas \n")
   for k,v in alumnos.items():
       print(f"Número del alumno: {k} Nombre: {v[0]} Apellido: {v[1]} Materia: {v[2]}")


def Modificaiones():
   print("Está en modificaciones")

def Menu():
   
   while True:
       
       print("""¿Qué quiere saber? \n
1:Altas
2:Bajas
3:Consultas
4:Modificaciones
5:Salir""")
       #en multileneas por lo general se muestran así, con un solo print
       try:
           ele = int(input("\nOpción: ")) #normalmente se usa el try solo para lo que queremos evaluar
       except ValueError:
           print("Esperaba un número!")
           Menu()
       if ele == 1:
           Altas()
       elif ele == 2:
           print(Bajas())
       elif ele == 3:
           Consultas()
       elif ele == 4:
           Modificaiones()
       elif ele == 5:
           print("Gracias por usar el sistema")
           break
       else:
           print("¡Solo puedes ingresar números del 1 al 5!")
      #cuando hay tantos elif también se puede simplificar con el uso de diccionarios    
       
if __name__ == '__main__': #para más adelante es mejor está forma de iniciar el módulo
   Menu()
   



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

Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.

tincopasan


Danielㅤ

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
¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!

@XSStringManolo

#5
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 (python) [Seleccionar]
#-*- coding: utf - 8 -*-

def altas(alumnos):
   alumnos[len(alumnos) + 1] = [input("Ingrese el nombre del alumno: "),
   input("Ingrese el apellido del alumno: "),
   input("Ingrese la materia: ")
   ]

def bajas():
   print("Está en bajas")

def consultas(alumnos):
   print("Está en consultas \n")
   for k,v in alumnos.items():
       print(f"Número del alumno: {k} Nombre: {v[0]} Apellido: {v[1]} Materia: {v[2]}")

def modificaciones():
   print("Está en modificaciones")

def salir():
   print("Gracias por usar el sistema")
   exit()

def menu():
       print("""¿Qué quiere saber?

1:Altas
2:Bajas
3:Consultas
4:Modificaciones
5:Salir
""")
       option = input("Seleccione una opción\n> ")
       return (option.isdigit() and int(option))

if __name__ == '__main__':
   alumnos = {}
   while 1:
     option = menu()
     option == 1 and altas(alumnos)
     option == 2 and bajas()
     option == 3 and consultas(alumnos)
     option == 4 and modificaciones()
     option == 5 and salir()

tincopasan

XSStringManolo muy purista del código pero las funciones sin return, vaya contradicción.

@XSStringManolo

Cita de: tincopasan en 11 Diciembre 2020, 18:58 PM
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.


tincopasan

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.

@XSStringManolo

Cita de: 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.
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.