Foros Python
Signo + en variable y que funcione como operador[Python] - Versión para impresión

+- Foros Python (https://foro.recursospython.com)
+-- Foro: Desarrollo (https://foro.recursospython.com/forumdisplay.php?fid=1)
+--- Foro: General (https://foro.recursospython.com/forumdisplay.php?fid=9)
+--- Tema: Signo + en variable y que funcione como operador[Python] (/showthread.php?tid=118)



Signo + en variable y que funcione como operador[Python] - Daniel.py - 07-01-2018

Hola gente, que tengan un muy buen día.-
Hace unas cuantas horas que estoy con el tema y no le encuentro la solución por eso los molesto, una sola pregunta ¿es esto
factible en python? de ser posible me podrian dar alguna guía.-


Código:
a=chr(43)
#b=ord('+')

#print(a)
#print(b)
print(5 a 7) #12

Saludos.
Daniel


RE: Signo + en variable y que funcione como operador[Python] - calvicius - 07-01-2018

(07-01-2018, 06:18 PM)Daniel.py escribió: Hola gente, que tengan un muy buen día.-
Hace unas cuantas horas que estoy con el tema y no le encuentro la solución por eso los molesto, una sola pregunta ¿es esto
factible en python? de ser posible me podrian dar alguna guía.-


Código:
a=chr(43)
#b=ord('+')

#print(a)
#print(b)
print(5 a 7) #12

Saludos.
Daniel

con python 3.4:

1.- creamos un diccionario con todos los operadores que queramos asi:

>>> operacioness = {"+": (lambda x,y: x+y), "-": (lambda x,y: x-y)}

2.- La forma de llamar al diccionario con los operandos que queramos:

>>> operacioness['+'](1,2)
3
>>> operacioness['-'](9,6)
3
>>> operaciones['-'](19,6)
13
>>>

Tambien puedes usar la libreria 'operator', pero no se como funciona exactamente esa libreria


RE: Signo + en variable y que funcione como operador[Python] - Daniel.py - 07-01-2018

Hola calvisius.

Gracias pero muchas gracias, no te das una idea las horas que estuve buscando en internet la solución y nada, además pensé un rato antes de hacer el post porque me parecía que era imposible en python,una locura mía.-Lo que estoy haciendo es una calculadora y cómo soy fanático del código conciso, me llegó esa idea y ahora la solución.-

Un abrazo.
Daniel


RE: Signo + en variable y que funcione como operador[Python] - calvicius - 08-01-2018

(07-01-2018, 08:47 PM)Daniel.py escribió: Hola calvisius.

Gracias pero muchas gracias, no te das una idea las horas que estuve buscando en internet la solución y nada, además pensé un rato antes de hacer el post porque me parecía que era imposible en python,una locura mía.-Lo que estoy haciendo es una calculadora y cómo soy fanático del código conciso, me llegó esa idea y ahora la solución.-

Un abrazo.
Daniel

hola, de nuevo.

si es para una calculadora... quizas te resulte más interesante usar los numeros como caracteres y utilizar la instrucción "eval"; asi:

>>> eval ('5' + '+' + '7')
12
>>> a = chr(43)
>>> eval ('5' + a + '7')
12
>>> eval('(4+8)/2')
6.0
>>>


RE: Signo + en variable y que funcione como operador[Python] - Daniel.py - 08-01-2018

Hola, muy buen día.-
Les dejo el programa para que alguien lo lea y me diga que puedo mejorar.-Les aclaro que todavía no llegue a las clases y si nadie propone nada lo voy a entender porque el foro es para errores y dudas y no para corregir programas.-


Código:
import os

def limpiar(mensaje):
    if mensaje == "Si":
        input("\n Pulse una tecla para continuar...")
    if os.name == "posix":
        os.system ("clear")
    elif os.name in ("ce", "nt", "dos"):
        os.system ("cls")

def mostrar(num1, num2, clave):
    print("\n Ingrese primer número...:", str(num1))
    if clave== "Si":
        print("\n Ingrese segundo número..:", str(num2))
        
def calculadora():
    while True:
        while True:
            try:
                num1 = float(input("\n Ingrese primer número...: "))
                if num1 != 0:
                    break
                else:
                    print("\n El ingreso debe ser distinto a cero...")
                    limpiar("Si")
            except:
                print("\n El ingreso no es correcto, intentelo nuevamente...")
                limpiar("Si")
        while True:
            try:
                num2 = float(input("\n Ingrese segundo número..: "))
                if num2 != 0:
                    break
                else:
                    print("\n El ingreso debe ser distinto a cero...")
                    limpiar("Si")
                    mostrar(num1, num2, "No")
            except:
                print("\n El ingreso no es correcto, intentelo nuevamente...")
                limpiar("Si")
                mostrar(num1, num2, "No")

        resultado(num1,num2)    
                
        print(" ============================")
        otra_salir = input("\n '0' para finalizar"
                            " otra para continuar.: ")     
        if otra_salir == '0':
            break
        else:
            limpiar("No")

def resultado(num1, num2):
    mOperador=('+', '-', '*', '/')
    operaciones = {"+": (lambda x,y: x+y), "-": (lambda x,y: x-y),
                "*": (lambda x,y: x*y), "/": (lambda x,y: x/y)}

    while True:
        operador = input('\n ingrese la operación a realizar "+ - / *"...:')
        if operador in mOperador:
            res = operaciones[operador](num1,num2)
            print("\n Resultado...........: {0:.3f} ".format(res))
            break
        else:
            print("\n El operador no es válido...")
            limpiar("Si")
            mostrar(num1, num2, "Si")

calculadora()


Saludos.
Daniel


RE: Signo + en variable y que funcione como operador[Python] - calvicius - 08-01-2018

hola, asi a simple vista ... sin entrar en el fondo.

En la funcion limpiar(mensaje):
es más económico usar True o False.

P.ej.:

def limpiar(estatus):
if estatus: #si estatus es True
bla, bla, ....

ahora llamando a la función:

limpiar(True) o limpiar(False)

Ten en cuenta que al pasar un "Si" o un "No", estás pasando a la función como minimo dos octetos (dependiendo del SO, y del tamaño de palabra). Mientras que con True o False, en realidad estás pasando un 0 o un 1, que es un bit (on / off)


RE: Signo + en variable y que funcione como operador[Python] - Francisco - 08-01-2018

Hola. Yo por mi parte te recomiendo que siempre utilices el menor código posible dentro de un bloque try/except (si es posible, ubicar únicamente la línea en la que potencialmente ocurre el error). También es recomendable indicar qué excepción se espera. En en este caso, la excepción esperada es ValueError (lanzada por float() cuando obtiene una cadena que no es representable como un número de coma flotante). Por otro lado, noto que el código que solicita un número al usuario aparece dos veces de la misma manera, cambiando únicamente el mensaje que se muestra en pantalla. Podrías convertir esa porción de código en una función que tome como argumento el mensaje que se quiere mostrar y que retorne el número ingresado.

Saludos!


RE: Signo + en variable y que funcione como operador[Python] - Daniel.py - 09-01-2018

Hola, ¿cómo están?.-
El mensaje es para que ambos me digan si es lo que proponían, retire las funciones limpiar() y mostrar() se me complicaba bastante esta última con el nuevo código, además creo que no debo ser tan prolijo al programar y que se preocupe el operador en ingresar correctamente los datos.-


Código:
def ingreso(mens):
   while True:
   try:
       numero = float(input("\n Ingrese {} número...: ".format(mens)))
       if numero != 0:
           break
       else:
           print("\n\t El ingreso debe ser distinto a cero...")
   except:
       print("\n\t El ingreso no es correcto, intentelo nuevamente...")

   return numero

def calculadora():
  while True:
       num1=ingreso("primer ")
       num2=ingreso("segundo")

       resultado(num1, num2)
       print(" ============================")
       otra_salir = input("\n '0' para finalizar"
                          " otra para continuar.: ")
       if otra_salir == '0':
           break

def resultado(num1, num2):
   mOperador=('+', '-', '*', '/')
   operaciones = {"+": (lambda x,y: x+y), "-": (lambda x,y: x-y),
   "*": (lambda x,y: x*y), "/": (lambda x,y: x/y)}

   while True:
       operador = input('\n ingrese la operación a realizar "+ - / *"...:')
       if operador in mOperador:
           res = operaciones[operador](num1,num2)
           print("\n Resultado...........: {0:.3f} ".format(res))
           break
       else:
           print("\n\t El operador no es válido...")

calculadora()


Un abrazo. Smile
Daniel


RE: Signo + en variable y que funcione como operador[Python] - Francisco - 10-01-2018

La función está excelente, es exactamente a lo que me refería. Respecto del bloque try/except, pensaba algo más o menos así:

  1. def ingreso(mens):
  2. while True:
  3. try:
  4. numero = float(input("\n Ingrese {} número...: ".format(mens)))
  5. except ValueError:
  6. print("\n\t El ingreso no es correcto, intentelo nuevamente...")
  7. else:
  8. if numero != 0:
  9. break
  10. else:
  11. print("\n\t El ingreso debe ser distinto a cero...")
  12. return numero


Saludos!