2013-10-17 64 views
8

我有一个数组与比较运算符的列表。我如何随机选择一个使用?我尝试了以下,但失败了。随机使用比较运算符?

from random import choice 
logi = ["<",">","=="] 
n=20 
n2 = choice(range(1,100)) 
if n choice(logi) n2: print n2 

回答

12

operator看看:

import operator 
logi = [operator.lt, operator.gt, operator.eq] 

... 

if choice(logi)(n, n2): 
    print n2 
+0

诅咒你和你的手指快! ;) –

+0

这太酷了;谢谢arshajii – Ahdee

+0

@Adede没问题,很高兴我能帮上忙。不要忘记[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)。 – arshajii

3

是的,你可以 - 使用operator模块。

from random import choice 
from operator import lt, gt, eq 

logi = [lt, gt, eq] 
n=20 
n2 = choice(range(1,100)) 
if choice(logi)(n, n2): print n2 
5

你想不采取运算符的文本表示,而是一些功能表示。为此,operator module是完美的:

import operator 

logi = [operator.lt, operator.gt, operator.eq] 

然后,您可以使用choice只是应用此功能:

n = 20 
n2 = choice(range(1,100)) 
if choice(logi)(n, n2): 
    print n2 
+0

+1说明 –

+0

作品很棒 - 感谢Valentin; – Ahdee

1

偏航!
由于@sweeneyrod说,我必须警告。它是不是建议使用eval,特别是用户输入。这只是做一个可能方式,但推荐一个

from random import choice 
logi = ["<",">","=="] 
n=20 
n2 = choice(range(1,100)) 
if eval("n%sn2"%choice(logi)): print n2 

或者

import operator 

logi = [operator.lt, operator.gt, operator.eq] 
n=20 
n2 = choice(range(1,100)) 
if choice(logi)(n, n2): print n2 
+0

第一个是一个非常糟糕的主意,因为使用'eval'是不安全的。 – rlms

+0

@sweeneyrod - 呃,我不会去说“非常糟糕”。这是个主意。使用'eval'只对用户输入有危险。尽管这是一个完全独立的程序。尽管如此,它还是鼓励使用一些可能变得非常快速的东西...... – iCodez

+0

@iCodez我认为这是一种非常危险的习惯,应该感到灰心,因为它会在发生损害的时候危险的。作为比喻,我会说使用'eval'就像玩俄罗斯轮盘赌一样。在没有用户输入的情况下,就像没有加载枪,所以在技术上它是安全的,但是如果不是这种情况,可能会发生的破坏量会增加,反而会有这种习惯。 – rlms