让用户决定应用于数字列表的操作

时间:2013-06-09 11:33:00

标签: python

我最近选择了Python,并想知道如何做到以下几点。假设我们有一个包含3个数字的列表:

x = [1, 2, 3]

然后,我们询问用户如何处理这些数字:

whatdo = raw_input('> ')

例如,用户输入“+2”。现在如何将“+ 2”应用于列表的所有元素?

2 个答案:

答案 0 :(得分:6)

import operator as oper

operations = {
    '+': oper.add,
    '-': oper.sub,
    '*': oper.mul
}

numbers = [1, 2, 3]

op, num1 = raw_input("> ").split()
num1 = int(num1)
op = operations[op]

y = [op(num1, num2) for num2 in numbers]
print y

--output:--
> * 30
[30, 60, 90]

答案 1 :(得分:2)

更通用的可能性是让用户指定一个函数,并使用Python的eval语句将字符串转换为实际的lambda函数。

numbers = [1, 2, 3]
function = raw_input('> Please specify f(x): ')
f = eval("lambda x: " + function)
print map(f, numbers)

示例:

> Please specify f(x): (x+1)**2
[4, 9, 16]

当然,这允许用户指定各种无效甚至恶意的“功能”,因此应谨慎处理。