Почему я не могу использовать значение, возвращенное функцией eval (), чтобы снова вызвать функцию калькулятора и использовать ответ для вычисления чего-то еще? - PullRequest
0 голосов
/ 05 августа 2020

Я хочу взять ответ, который был оценен после использования калькулятора, чтобы выполнить с ним больше операций, но когда я пытаюсь использовать переменную ответа в функции calc(), он возвращает эту ошибку: TypeError: 'in <string>' requires string as left operand, not function.

Как я могу получить его, чтобы я мог постоянно получать ответ и продолжать выполнять с ним больше операций? Кроме того, мне трудно понять, как я могу постоянно использовать этот калькулятор вместо сценария, который завершает работу после одного расчета. Как лучше всего продолжать работу до тех пор, пока я не перестану этого делать?

# Calculates basic operations
def calc(x, op, y):
    if op in "+-*/":
        ans =  eval(str(x) + op + str(y))
        return ans

# Main function that controls the text-based calculator
def console_calculator():

    def user_input():
        while True:
            x = input('Type your first number: ')
            try:
                return int(x)
            except ValueError:
                try:
                    return float(x)
                except ValueError: 
                    print('Please type in a number...')
        
    def operation_input():
        while True:
            operation = input('Type one of the following, "+ - * /": ')
            if operation in "+-*/":
                return operation
            else:
                print('Please type one of the following, "+ - * /"...')
             

    answer = calc(user_input(), operation_input(), user_input())
    print(answer)

    print(calc(str(answer), operation_input, user_input)) # This line of code throws the error

console_calculator()

1 Ответ

1 голос
/ 05 августа 2020

когда я пытаюсь использовать переменную ответа в функции cal c (), она возвращает эту ошибку: «TypeError: 'in' требует строки в качестве левого операнда, а не функции».

Когда вы передаете функцию без круглых скобок как аргумент, вы передаете объект функции , а не значение, возвращаемое функцией.

 print(calc(str(answer), operation_input(), user_input()))
...