2012-02-11 46 views
39

Tôi đã làm việc trên một trò chơi dựa trên văn bản bằng Python, và tôi đã bắt gặp một trường hợp mà tôi muốn định dạng một chuỗi khác nhau dựa trên một tập hợp các điều kiện.Định dạng chuỗi điều kiện Python

Cụ thể, tôi muốn hiển thị văn bản mô tả các mục trong một phòng. Tôi muốn điều này được hiển thị, trong phần mô tả của phòng, nếu và chỉ khi đối tượng trong câu hỏi có trong danh sách các mục của đối tượng phòng. Cách nó được thiết lập, tôi cảm thấy rằng chỉ cần ghép nối các chuỗi dựa trên điều kiện sẽ không xuất như tôi muốn, và nó sẽ là tốt hơn để có một chuỗi khác nhau cho mỗi trường hợp.

Câu hỏi của tôi là, có phương pháp pythonic nào để định dạng chuỗi dựa trên kết quả của điều kiện Boolean không? Tôi có thể sử dụng một cấu trúc vòng lặp for, nhưng tôi đã tự hỏi nếu có cái gì đó dễ dàng hơn, tương tự như một biểu thức máy phát điện.

Tôi đang tìm một cái gì đó tương tự như sau, ở dạng chuỗi

num = [x for x in xrange(1,100) if x % 10 == 0] 

Như một ví dụ chung của những gì tôi muốn nói:

print "At least, that's what %s told me." %("he" if gender == "male", else: "she") 

Tôi nhận ra rằng ví dụ này không phải là hợp lệ Python, nhưng nó cho thấy, nói chung, những gì tôi đang tìm kiếm. Tôi tự hỏi nếu có bất kỳ biểu thức hợp lệ cho định dạng chuỗi boolean, tương tự như ở trên. Sau khi tìm kiếm xung quanh một chút, tôi không thể tìm thấy bất kỳ điều gì liên quan cụ thể đến định dạng chuỗi có điều kiện. Tôi đã tìm thấy một số bài viết trên chuỗi định dạng nói chung, nhưng đó không phải là những gì tôi đang tìm kiếm.

Nếu một cái gì đó như thế thực sự tồn tại, nó sẽ rất hữu ích. Tôi cũng mở cho bất kỳ phương pháp thay thế nào có thể được đề xuất. Cảm ơn trước vì bất kỳ trợ giúp nào bạn có thể cung cấp.

+2

nếu bạn xóa dấu phẩy và dấu chấm phẩy nó trở thành pytho hợp lệ n – yurib

+0

Giải pháp không phải mã: sử dụng 'chúng' (Tôi biết đó không phải là những gì bạn yêu cầu + Tôi biết câu hỏi này khá cũ) – poxip

+0

@poxip, điều đó không đúng ngữ pháp trừ khi đại từ đề cập đến nhiều hơn một người. Nói vậy, tôi tin rằng một số hướng dẫn về phong cách đã biến mất và đã chấp nhận cấu trúc không thể tưởng tượng này, nhưng tôi nghĩ đó là rác. – Bobort

Trả lời

68

Mã của bạn thực sự là Python hợp lệ nếu bạn xóa hai ký tự, dấu phẩy và dấu hai chấm.

>>> gender= "male" 
>>> print "At least, that's what %s told me." %("he" if gender == "male" else "she") 
At least, that's what he told me. 

Nhiều phong cách hiện đại sử dụng .format, mặc dù:

>>> s = "At least, that's what {pronoun} told me.".format(pronoun="he" if gender == "male" else "she") 
>>> s 
"At least, that's what he told me." 

nơi đối số sang định dạng có thể là một dict bạn xây dựng trong bất cứ điều gì phức tạp mà bạn thích.

+1

Cảm ơn bạn. Tôi nghĩ rằng sẽ có một thiết lập như thế, nhưng tôi đoán tôi đã không sử dụng các điều kiện tìm kiếm thích hợp. Thật tốt khi biết rằng điều đó là có thể, và tôi biết nhiều hơn về phong cách của Python hơn là tôi nghĩ. –

+5

@NiklasR: 'str.format()' được giới thiệu trong Python 2.6, không phải 2.7. –

+2

@SvenMarnach Ồ, tôi xin lỗi bạn nói đúng. –

7

Có một biểu thức điều kiện trong Python mà có dạng

A if condition else B 

dụ của bạn có thể dễ dàng biến thành Python hợp lệ bằng cách bỏ qua chỉ hai nhân vật:

print ("At least, that's what %s told me." % 
     ("he" if gender == "male" else "she")) 

Một thay thế tôi muốn thường thích sử dụng từ điển:

pronouns = {"female": "she", "male": "he"} 
print "At least, that's what %s told me." % pronouns[gender] 
Các vấn đề liên quan