Để trả lời các câu hỏi của bạn theo thứ tự ngược lại, lý do tại sao so sánh rõ ràng với True
không phù hợp với bạn là Python đã không diễn giải biểu thức theo cách bạn mong đợi. Các phân tích cú pháp Python có xử lý đặc biệt của so sánh biểu thức để bạn có thể chuỗi chúng lại với nhau và có được một kết quả hợp lý, như thế này:
>>> "a" == "a" == "a"
True
ý rằng Python có để điều trị toàn bộ điều này là một hoạt động, bởi vì nếu bạn chia nó vào hai hoạt động một trong hai cách bạn không nhận được kết quả tương tự:
>>> ("a" == "a") == "a"
False
>>> "a" == ("a" == "a")
False
những hành xử khác nhau bởi vì một phần trong ngoặc đơn được đánh giá đầu tiên và trả True
, nhưng True != "a"
nên toàn bộ biểu thức trả về false.
Bởi các quyền trên không thực sự có tác động đến chương trình của bạn cả. Thật không may, Python xử lý in
qua cơ chế tương tự như ==
vì thế khi bạn chuỗi này lại với nhau chúng được diễn giải như là một chuỗi như trên, vì vậy Python thực sự đánh giá nó như sau:
>> "a" in ["a"] == True
False
>>> ("a" in ["a"]) and ("a" == True)
False
Đó là lập dị và cho là phản trực giác, nhưng đó không may là cách nó hoạt động.Để có được hành vi bạn muốn bạn cần phải sử dụng dấu ngoặc đơn để buộc Python để đánh giá phần đầu tiên cách riêng biệt:
>>> ("a" in ["a"]) == True
True
Với tất cả những gì đã nói, các == True
là không cần thiết bởi vì, như bạn nghi ngờ, khái niệm đã trả về một boolean và tuyên bố if
chỉ có thể đánh giá nó như là.
Để quay lại vấn đề khác của bạn, tôi tin rằng những gì bạn đang cố làm là lấy một dòng đầu vào và tạo ra một dòng đầu ra tương ứng tùy thuộc vào những gì người dùng đã nhập. Bạn có thể áp dụng các nhà điều hành in
thành một chuỗi và một danh sách để xem nếu chuỗi nằm trong danh sách, cho phép bạn để loại bỏ for
vòng lặp của bạn hoàn toàn:
answer = ['Yes', 'yes', 'YES']
answer2 = ['No', 'no', 'NO']
ans = raw_input()
if ans in answer:
print "Yes!"
elif ans in answer2:
print "No!"
else:
print "Don't know what that means"
này kiểm tra đầu tiên nếu đầu vào phù hợp với bất kỳ chuỗi trong answer
, sau đó tương tự cho answer2
. Tất nhiên, bạn có thể đạt được hiệu ứng tương tự nhưng cũng hỗ trợ các dạng khác như YeS
bằng cách chuyển đổi đầu vào thành chữ thường và so sánh nó với dạng chữ thường:
if ans.lower() == "yes":
print "Yes!"
# (and so forth)