2011-02-11 54 views
0

可以說我有串根據輸入其中的變化:變量作爲循環的表情

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

編輯: 不,我不希望打印的數字,我想改變循環條件(表達式)動態。

CODE的作品:

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

我不知道你在說什麼(「循環的表達」?!?)。注意更具體,包括僞代碼示例等? – delnan 2011-02-11 12:36:52

+0

「我不需要重複自己寫雙循環」?這是什麼意思?請提供一個你重複自己的「雙重循環」的例子。 – 2011-02-11 13:02:53

回答

4

示例代碼:

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

也許使用lambda可能是你的問題的解決方案。它比使用eval更好(更優雅,更無缺陷,更安全)。

當然,還有一些非常特殊的情況,eval仍然需要。

0

你似乎要動態地改變循環的條件,但因此很難理解爲什麼你不提供一個很好的使用情況。如果你只是想用0.1的增量打印1和1.9之間的數字,也有簡單的方法來做到這一點:

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

之一。不需要這種動態表達魔法。另外,您似乎希望同一個值(a)同時具有兩種不同的含義,即要打印的值和控制打印多少值的表達式。這也許是一些混亂的根源。

4

你在問如何運行用戶輸入。答案是eval(或 - 不在這裏,但通常是 - exec)。當然這是一個不好的答案,但這是唯一的答案。如果唯一的答案是不好的,那麼問題就很糟糕。

你在做什麼真的試圖做什麼?有幾個程序(最顯着的是編程語言實現)需要給用戶這麼多的權力。你的意思是沒有。有機會,你可以做你想做的事情,而無需運行用戶輸入。但是我們需要知道你想要做什麼來提出可行的選擇。

+0

+1,如果唯一的答案是壞的,那麼問題就不好了! – user225312 2011-02-11 12:49:10