для арифметики цикла

operation = ['/','*','+','-']
a =5
b= 2
for op in operation:
    output = a+op+b
    print output

Вот результат, который я получаю:

5/2
5*2
5+2
5-2

но я хочу

2.5
10
7
3

Как это сделать?


person Rahul Sonwalkar    schedule 29.10.2014    source источник
comment
Почему, черт возьми, вы ожидаете, например, "5" + "/" + "2" быть 2.5? Это просто строка, она не будет волшебным образом оценена как вычисление (не говоря уже о том, что в Python 2.x это вычисление оценивается как 2).   -  person jonrsharpe    schedule 29.10.2014


Ответы (3)


Самый простой способ - использовать словарь, который сопоставляет символы с функциями, выполняющими операцию, который можно найти в модуле operator.

import operator
d = { '+': operator.add, '-': operator.sub, '*': operator.mul, '/': operator.div }
operation = d.keys()
a = 5
b = 2
for op in operation:
    output = d[op](a, b)
    print output
person chepner    schedule 29.10.2014

Используйте модуль operator:

a, b = 5, 2
for op in (operator.div, operator.mul, operator.add, operator.sub):
    print(op(a, b))
person Fred Foo    schedule 29.10.2014

Для этого вы можете использовать функцию eval:

print eval(output)

Примечание: eval оценивает что-либо в строке, даже если это опасно. Кроме того, поскольку вы заранее знаете своих операторов, вы можете использовать модуль операторов:

import operators
operation = [operators.div, operators.mul, operators.add, operators.sub]
a = 5
b = 2
for op in operation:
    output = op(a, b)
    print output
person matsjoyce    schedule 29.10.2014