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
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)