Как я могу выполнить арифметическую операцию, принимая целое число и строку в качестве ввода - PullRequest
0 голосов
/ 08 мая 2018

Я беру целочисленный ввод из функции и операцию, такую ​​как «+10», от пользователя и печатаю результат после вычисления. Пока у меня есть это

def Eval(arg1, arg2):

    if (arg1 >= 100):
        arg1 == 100
    else:
        arg1 = eval((arg1)(arg2))
        print arg1
Eval(10,'+10')

Но у меня есть TypeError: 'int' object is not callable error. Может кто-нибудь сказать мне, где я делаю не так?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Проблема возникает при попытке передать eval, int и str, когда он принимает только str. Вы можете решить эту проблему, комбинируя arg1 и arg2, после преобразования arg1 в str.

arg1 = 10
arg2 = '+1'
evalInput = str(arg1) + arg2
eval(evalInput)
>> 11

Это можно сделать чище, используя форматирование строк, но это должно дать вам общее представление.

0 голосов
/ 08 мая 2018

Вы можете использовать ast.literal_eval. Рекомендуется вместо eval из соображений безопасности.

from ast import literal_eval

def Eval(arg1, arg2):

    if (arg1 >= 100):
        arg1 == 100

    return literal_eval(str(arg1)+arg2)

x = raw_input('Append string to variable for calculation:\n')  # '+10'
res = Eval(10, x)

print res  # 20
...