Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Menu con Argumentos
#1
Hola.
Soy nuevo en Pyhon.

Me dejaron una tarea:
Crear un programa que pida argumentos y dependiendo de lo que se ingrese vamos a:

-s o --suma = Va sumar n cantidad de números.
-r o --resta = Va restar n cantidad de números.
-m o --mul = Va multiplicar n cantidad de números.
-d o --div = Va dividir n cantidad de números.

python programa.py -s 1 2 3
Resultado =6

Código:
import sys

#Validar si es el principal
if __name__ == "__main__":
    #variable
    tamao = len(sys.argv)
    #ciclo que va estar sacando cada uno de los argumentos(elementos) que hayan ingresado
    for argumento in sys.argv:
        #validar cada uno de los argumentos
        if argumento == "-h" or argumento == "--help" or argumento== "":
            #Mostar el Menu
            print("Bienvenido al Programa x\
\n-h or --help: Ayuda\
\n-s or --suma: Sumar n Cantidad de Numeros\
\n-r or --resta: Restar n Cantidad de Numeros\
\n-m or --mult: Multiplicar n Cantidad de Numeros\
\n-d or --div: Dividir n Cantidad de Numeros")
        #Validar las opciones
        if argumento == "-s" or argumento == "--suma":
            i = 2 #Inicializar posicion donde se encuentra el argumento para comenzar operacion
            #Validar Tamaño del argumento
            if tamao > 3:
                resultado = 0
                #brincar de argumento en argumento
                while i < tamao:
                    #operacion suma
                    resultado = resultado + int( sys.argv[i] )
                    i+=1
                print(f"Resultado = {resultado}")
            else:
                print("Faltan argumentos!")

        if argumento == "-r" or argumento == "--resta":
            i = 2
            if tamao > 3:
                resultado = 0
                while i < tamao:
                    #operacion restar
                    if i == 2:
                        resultado = int( sys.argv[i] )
                    else:
                        resultado = resultado - int( sys.argv[i] )
                    i+=1
                print(f"Resultado = {resultado}")
            else:
                print("Faltan argumentos!")

        if argumento == "-m" or argumento == "--mult":
            i = 2
            if tamao > 3:
                resultado = 1
                while i < tamao:
                    #operacion multiplicar
                    resultado = resultado * int( sys.argv[i] )
                    i+=1
                print(f"Resultado = {resultado}")
            else:
                print("Faltan argumentos!")

        if argumento == "-d" or argumento == "--div":
            i = 2
            if tamao > 3:
                resultado = 0
                while i < tamao:
                    if i > 2 and int( sys.argv[i]) == 0:
                        print("Error: División x Cero")
                        resultado = None
                        break
                    #operacion division
                    elif i == 2:
                        resultado = int( sys.argv[i] )
                    else:
                        resultado = resultado / int( sys.argv[i] )
                    i+=1
                print(f"Resultado = {resultado}")
            else:
                print("Faltan argumentos!")

parte2 del ejercicio:hacer un detalle de optimización de código con un decorador(beforeAccion, afterAcccion) y mandar a llamar como función la operación(suma, resta, multiplicación, división)


Huh  Lo he intentado asi:

Código:
def decorador(operacionesMatematicas):

    def antes(*args, **kwargs):#beforeAccion
        i = 2
        if tamao > 3:
            resultado = 0
            while i < tamao:
                operacionesMatematicas(*args, **kwargs) #resultado = resultado + int( sys.argv[i] )
                i+=1
                print(f"Resultado = {resultado}")
        else:
            print("Faltan argumentos!")

    def despues():#afterAcccion
        pass
     
    def muestraDatos(*args, **kwargs):
        antes()
        resultado = operacionesMatematicas(*args, **kwargs)#
        despues()
        return resultado
    return muestraDatos


pero morir en el intento  Sad


alguna  Idea
Responder
#2
Hola, bienvenido.

No logro entender qué rol debería cumplir un decorador en un ejercicio como este. ¿Qué son beforeAccion y afterAccion? Si podés explayarte un poco más en la explicación, tal vez te podemos dar una mano. Smile

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)