2012-08-07 13 views
16

Hi, tôi đang cố gắng để chèn một nhà điều hành toán học biến thành một câu lệnh if, một ví dụ về những gì tôi đang cố gắng để đạt được: -python câu lệnh if với nhà điều hành toán học biến

maths_operator = "==" 

if "test" maths_operator "test": 
     print "match found" 

maths_operator = "!=" 

if "test" maths_operator "test": 
     print "match found" 
else: 
     print "match not found" 

rõ ràng là thất bại trên với SyntaxError: invalid syntax. Tôi đã thử bằng cách sử dụng exec và eval nhưng không làm việc trong một tuyên bố nếu, những lựa chọn nào tôi có để có được xung quanh này?

Trả lời

18

Sử dụng gói điều hành cùng với một cuốn từ điển để tìm kiếm các nhà khai thác theo văn bản tương đương của họ. Tất cả những điều này phải là toán tử đơn hoặc nhị phân để hoạt động liên tục.

import operator 
ops = {'==' : operator.eq, 
     '!=' : operator.ne, 
     '<=' : operator.le, 
     '>=' : operator.ge, 
     '>' : operator.gt, 
     '<' : operator.lt} 

maths_operator = "==" 

if ops[maths_operator]("test", "test"): 
    print "match found" 

maths_operator = "!=" 

if ops[maths_operator]("test", "test"): 
    print "match found" 
else: 
    print "match not found" 
+1

hoàn hảo !, cảm ơn Nathan một ví dụ thực sự tốt quá – Paul

16

Sử dụng các mô-đun operator:

import operator 
op = operator.eq 

if op("test", "test"): 
    print "match found" 
+1

nhờ câu trả lời của Mark, các mô-đun điều hành def là cách để có được xung quanh điều này. – Paul

1

Tôi đã cố gắng sử dụng exec và eval nhưng không phải làm việc trong một câu lệnh if

Vì lợi ích của sự hoàn chỉnh nó nên được đề cập rằng họ làm việc, ngay cả khi câu trả lời posted cung cấp một giải pháp tốt hơn. Bạn sẽ phải eval() toàn bộ so sánh, không chỉ các nhà điều hành:

maths_operator = "==" 

if eval('"test"' + maths_operator '"test"'): 
     print "match found" 

hoặc exec dòng:

exec 'if "test"' + maths_operator + '"test": print "match found"'