假设我有根据输入改变的字符串:
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.
答案 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
)同时具有两个非常不同的含义,即打印值和控制要打印的值的表达式。这可能是一些混乱的根源。