Soy un novato en python. Creé un programa de calculadora que aceptará 2 números y un tipo de operación del usuario. Ya tengo un código de trabajo para esto, pero quiero simplificar aún más el código explorando y usando la función. Aquí está la parte del código:

def addition(num1,num2):
    sum = num1 + num2
    print('The sum is ', sum)
def subtraction(num1,num2):
    sub = num1 - num2
    print('The difference is ', sub)
def inputNumber():
    num1 = float(input('Enter the first number: '))
    num2 = float(input('Enter the second number: '))
    return num1,num2
print('Enter the corresponding number to perform the operation:\n')
print('1 - addition')
print('2 - subtraction')
print('q - quit')
while True:
    try:
        operation = input('Select operation > ').lower()
    if operation == 'q':
        break
    elif operation == '1':
        addition(inputNumber())
    elif operation == '2':
        subtraction(inputNumber())
    else:
        print('Not valid. Try again.')
except:
    print('Invalid!')

Mi problema es que después de ingresar 2 números no realiza la operación. Creo que el problema es que los 2 valores de entrada no regresaron correctamente.

Gracias

0
pythonoverflow 5 mar. 2018 a las 10:04

3 respuestas

La mejor respuesta

Esto debería ayudar. La función inputNumber está devolviendo una sola tupla de ambos flotantes.

def addition(num):    #--->Update
    sum = num[0] + num[1]     #--->using index to get first and second number.
    print('The sum is ', sum)
def subtraction(num):    #--->Update
    sub = num[0] - num[1]      #--->using index to get first and second number.

    print('The difference is ', sub)
def inputNumber():
    num1 = float(input('Enter the first number: '))
    num2 = float(input('Enter the second number: '))
    return num1,num2                 #-----> Returns a tuple. EX: (3.0, 4.0)
print('Enter the corresponding number to perform the operation:\n')
print('1 - addition')
print('2 - subtraction')
print('q - quit')
while True:
    try:
        operation = input('Select operation > ').lower()
        if operation == 'q':
            break
        elif operation == '1':
            addition(inputNumber())
        elif operation == '2':
            subtraction(inputNumber())
        else:
            print('Not valid. Try again.')
    except Exception, e:
        print('Invalid!', e)
0
Rakesh 5 mar. 2018 a las 07:10

El problema es que sus funciones esperan dos entradas, pero obtienen una tupla (eso es lo que devuelve una función cuando usa return foo, bar)

Puedes expandir la tupla usando una astrix como esta (también se solucionó el problema de sangría):

def addition(num1,num2):
    sum = num1 + num2
    print('The sum is ', sum)
def subtraction(num1,num2):
    sub = num1 - num2
    print('The difference is ', sub)
def inputNumber():
    num1 = float(input('Enter the first number: '))
    num2 = float(input('Enter the second number: '))
    return num1,num2
print('Enter the corresponding number to perform the operation:\n')
print('1 - addition')
print('2 - subtraction')
print('q - quit')
while True:
    try:
        operation = input('Select operation > ').lower()
        if operation == 'q':
            break
        elif operation == '1':
            addition(*inputNumber())
        elif operation == '2':
            subtraction(*inputNumber())
        else:
            print('Not valid. Try again.')
    except:
        print('Invalid!')
0
shayelk 5 mar. 2018 a las 09:42
def addition((num1,num2)):
    sum = num1 + num2
    print('The sum is ', sum)
def subtraction((num1,num2)):
    sub = num1 - num2
    print('The difference is ', sub)
def inputNumber():
    num1 = float(raw_input('Enter the first number: '))
    num2 = float(raw_input('Enter the second number: '))
    return num1,num2
print('Enter the corresponding number to perform the operation:\n')
print('1 - addition')
print('2 - subtraction')
print('q - quit')
while True:
    try:
        operation = raw_input('Select operation > ').lower()
        if operation == 'q':
            break
        elif operation == '1':
            import pdb;pdb.set_trace()
            addition(inputNumber())
        elif operation == '2':
            subtraction(inputNumber())
        else:
            print('Not valid. Try again.')
    except:
        print('Invalid!')
  1. Use raw_input para tomar entradas del usuario que contiene string, así como int (aplicable solo para Python 2)
  2. Marque la sangría Try except.

  3. La palabra clave return regresa en una tupla, así que modifique la suma y la resta.

0
Harsha Biyani 5 mar. 2018 a las 07:14