变量作为循环的表达式

时间:2011-02-11 12:29:30

标签: python variables loops expression

假设我有根据输入改变的字符串:

expression=True

expression="a>1"

我怎样才能将这个变量用作循环表达式,所以我不需要重复自己编写双循环。 (并且不使用eval)?

伪代码:

expression="a<2"
a=1
while expression:
    print a,
    a+=0.1

会打印出类似的东西: 1 1.1 1.2 <...> 1.9

编辑: 不,我不想打印数字,我想动态地改变循环条件(表达式)。

有效的代码:

a="b==2"
b=2
while eval(a):
    //do things.

3 个答案:

答案 0 :(得分:4)

您正在询问如何运行用户输入。答案是eval(或者 - 不是这里,但通常是exec)。当然这是一个糟糕的答案,但这是唯一的答案。如果唯一的答案是坏的,那么问题就很糟糕了。

真正尝试做什么?很少有程序(最值得注意的是编程语言实现)需要为用户提供这么大的功能。你可能没有。您可以在不运行用户输入的情况下执行您想要执行的操作。但是我们需要知道你想要做些什么来建议可行的替代方案。

答案 1 :(得分:4)

示例代码:

somevar = 3
expression = lambda: somevar < 5
while expression():
    ...
    if continue_if_even:
        expression = lambda: (somevar % 2) == 0
    ...

使用lambda可能是您问题的解决方案。与使用eval相比,它更好(更优雅,更无错误,更安全)。

当然,还有一些特殊情况需要eval

答案 2 :(得分:0)

您似乎想要动态地更改循环的条件,但是您没有提供非常好的用例,因此很难理解为什么。如果您只想打印1到1.9之间的数字,增量为0.1,那么有很简单的方法可以做到:

for x in xrange(10):
  print "1.%d" % i

是一个。没有必要使用这种动态表达魔法。此外,您似乎希望相同的值(a)同时具有两个非常不同的含义,即打印值和控制要打印的值的表达式。这可能是一些混乱的根源。