2009-03-04 40 views
31

Trong C# chúng ta có thể sử dụng && (boolean và) như thế này:Làm thế nào để sử dụng boolean 'và' bằng Python

int i = 5; 
int ii = 10; 
if(i == 5 && ii == 10) { 
    Console.WriteLine("i is 5, and ii is 10"); 
} 
Console.ReadKey(true); 

Nhưng thử rằng với python:

i = 5 
ii = 10 
if i == 5 && ii == 10: 
    print "i is 5 and ii is 10";  

tôi nhận được một lỗi: SyntaxError: invalid syntax

Nếu tôi sử dụng một đơn &, ít nhất tôi không gặp lỗi cú pháp. Làm cách nào để làm một boolean && bằng Python?

Trả lời

52

Hãy thử điều này:

i = 5 
ii = 10 
if i == 5 and ii == 10: 
     print "i is 5 and ii is 10" 

Sửa: Oh, và bạn không cần phải có dấu chấm phẩy trên dòng cuối cùng (chỉnh sửa để xoá bỏ nó từ mã của tôi).

+0

Dấu chấm phẩy hữu ích nếu chúng ta muốn kết hợp các dòng mã. – riza

+1

Kết hợp các đường thẳng không phải là cách "nhiệt đới" mặc dù – Rodrigo

+0

Mặc dù bạn có thể kết hợp các dòng, như Rodrigo nói, nó không phải là "pythonic". Vì trong trường hợp đặc biệt này, dấu chấm phẩy không có tác dụng gì cả, tôi đã đưa ra nhận xét về sự dư thừa của nó. Tôi cho rằng người hỏi là người mới đối với python và không muốn trả lời câu trả lời của tôi về cái gì là "pythonic" và dấu chấm phẩy nào. – Mizipzor

6

& được sử dụng để so sánh từng chút một. sử dụng and để thay thế. và btw, bạn không cần dấu chấm phẩy ở cuối câu lệnh in.

15

Nhà điều hành đúng sẽ được sử dụng là những từ khóa 'hoặc' và 'và', mà trong ví dụ của bạn, cách chính xác để diễn tả này sẽ là:

if i == 5 and ii == 10: 
    print "i is 5 and ii is 10" 

Bạn có thể tham khảo các chi tiết trong "Boolean Operations" section in the language reference .

+0

Bất cứ khi nào tôi nhìn thấy 'và', tôi reahc cho dấu ngoặc đơn của tôi – Mawg

7

Bạn cũng có thể kiểm tra chúng dưới dạng cặp vợ chồng.

if (i,ii)==(5,10): 
    print "i is 5 and ii is 10" 
+1

Các pedant trong tôi muốn chỉ ra rằng bạn nên nói" tuple "thay vì" cặp vợ chồng "nhưng tôi biết những gì bạn có ý nghĩa. :) –

+0

Một cặp vợ chồng không phải là một tuple? – fulmicoton

-2

Trong python, sử dụng and thay vì && như thế này:

#!/usr/bin/python 
foo = True; 
bar = True; 
if foo and bar: 
    print "both are true"; 

này in:

both are true 
+1

Chính xác hơn, chúng tôi đánh vần "&&" là "và". Chúng tôi đánh vần "&" là "&" như trong cả C# và python, chúng thực hiện một cách bitwise, chứ không phải logic và hoạt động. – Brian

+1

Bạn đúng, tất nhiên. Xin lỗi. –

22

Như đã chỉ ra, "&" trong python thực hiện một phép toán và hoạt động, giống như trong C#. and tương đương với toán tử &&.

Kể từ khi chúng tôi đang làm việc với các dữ liệu boolean (i == 5Trueii == 10 cũng là True), bạn có thể tự hỏi tại sao điều này không hoặc làm việc anyway (True bị đối xử như một số nguyên vẫn nên có nghĩa là Đúng & Đúng là một Đúng giá trị), hoặc ném một ngoại lệ (ví dụ: bằng cách cấm các hoạt động bitwise trên các kiểu boolean)

Lý do là ưu tiên của toán tử.Các "and" nhà điều hành liên kết lỏng lẻo hơn ==, vì vậy các biểu hiện: "i==5 and ii==10" tương đương với: "(i==5) and (ii==10)"

Tuy nhiên, Bitwise & có độ ưu tiên cao hơn "==" (vì bạn sẽ không muốn biểu hiện như "a & 0xff == ch" có nghĩa là "a & (0xff == ch)"), vì vậy các biểu hiện thực sự sẽ được hiểu là:

if i == (5 & ii) == 10: 

nào đang sử dụng toán tử python của chaining có nghĩa là: không valuee của ii anded với 5 bằng cả i và 10. Rõ ràng điều này sẽ không bao giờ đúng.

Bạn thực sự sẽ nhận được (dường như) câu trả lời đúng nếu bạn đã bao gồm dấu ngoặc để buộc các ưu tiên, vì vậy:

if (i==5) & (ii=10) 

sẽ gây ra các tuyên bố được in. Tuy nhiên, điều sai trái là "&" có nhiều ngữ nghĩa khác nhau cho "and" - (ưu tiên, ngắn gọn, hành vi với các đối số nguyên vv), vì vậy thật may mắn khi bạn bắt được nó ở đây thay vì bị lừa cho đến khi nó được tạo ra lỗi ít rõ ràng hơn.

Các vấn đề liên quan