Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Signo + en variable y que funcione como operador[Python]
#1
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
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#2
(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
Responder
#3
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
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#4
(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
>>>
Responder
#5
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
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#6
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)
Responder
#7
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!
¡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
#8
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
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#9
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í:

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

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)