2013-05-24 35 views
5

Tôi đang làm một bài tập về một trò chơi tim với phiên bản khác. Nó nói rằng nếu chúng tôi được đưa ra một danh sách mycards có chứa tất cả các thẻ mà người chơi hiện đang nắm giữ trong tay của họ. Và chơi là một thẻ đại diện cho một thẻ tiềm năng. Và nếu tất cả thẻ của chúng chứa HEART (H) hoặc QUEEN OF SPADES (QS), nó sẽ trả về True.Làm cách nào để kiểm tra tất cả các yếu tố trong danh sách có yêu cầu cụ thể?

Ví dụ

>>> mycards= ['0H','8H','7H','6H','AH','QS'] 
>>> play = ['QS'] 

Nó sẽ trở lại Đúng

đây là những gì tôi đã cố gắng

if play[1] == 'H': 
    return True 
if play == 'QS': 
    return True 
else: 
    return False 

Nhưng tôi nghĩ rằng mã của tôi chỉ cần kiểm tra một QS và một H trong danh sách. Cách tạo mã có chứa all hoặc QS hoặc H?

Trả lời

10

Mô tả của bạn bản đồ trực tiếp đến giải pháp:

Edited cho rõ ràng:

mycards= ['0H','8H','7H','6H','AH','QS'] 
all((x == 'QS' or 'H' in x) for x in mycards) 
# True 
+1

Eh? Tại sao downvote ở đây? –

+0

Ồ đúng, tôi cần một chút cà phê +1 – jamylak

+0

Cảm ơn bạn rất nhiều –

5
>>> mycards= ['0H','8H','7H','6H','AH','QS'] 
>>> all(x[-1] == 'H' or x == 'QS' for x in mycards) 
True 
+0

Không chắc chắn điều này khác với những gì Thomas đã đăng. –

+0

Tôi không nghĩ rằng 'x [-1] == 'H'' là cần thiết - theo như tôi biết (và cà phê đang trên đường đi), chỉ một bộ đồ trong một cỗ bài bắt đầu bằng' H'. –

+0

+1, bởi vì câu hỏi ban đầu chứa tương đương 'x [1]'. Điều này cũng nhanh hơn ''H' trong x'. – EOL

2

Từ 'Bài tập về nhà' của bạn của nó tôi sẽ không cung cấp cho bạn với mã làm sẵn. :)

lặp qua các danh sách sử dụng một vòng lặp:

cho Eg .:

for el in mycards: 

tại mỗi lần lặp bạn phải kiểm tra hoặc bất kỳ trong hai điều kiện là đúng sự thật hay không.

if el == 'QS' or el[1] == 'H': 

nếu thẻ là Queen of Spade hoặc Heart ở trên điều kiện sẽ là đúng. Hy vọng bạn nhận được nó cho đến bây giờ. Và nếu điều kiện không đúng, chỉ cần trả về Sai.

Nếu tất cả các phần tử trong danh sách của bạn được kiểm tra bởi vòng lặp và chưa được trả về False, do đó tất cả các thẻ đều là Queen of Spade hoặc Heart. Vì vậy, trả về True sau khi vòng lặp kết thúc.

Hãy thử một mình một thời gian, nếu vẫn không nhận được tôi sẽ gửi mã theo yêu cầu của bạn (nhưng bạn sẽ phải chỉ cho tôi những gì bạn đã cố gắng: p)

Edit: Vì bạn' đã thử nó, tôi đang đăng mã quá.

def HorQS(mycards): 
    for i in mycards: 
     if i != 'QS': 
      if i[1] != 'H': 
       return False 
    return True 

print HorQS(['0H','8H','7H','6H','AH','QS']) # True 
print HorQS(['0H','8H','7H','6H','AH','HS']) # False 
print HorQS(['0H','8H','7K','6H','AH','HS']) # False 
+0

Python có 'all()' để mọi người không phải tái tạo lại bánh xe như ở đây, và do đó ý nghĩa của mã của họ rõ ràng hơn nhiều. Tôi sẽ không khuyến khích bất cứ ai sử dụng một giải pháp phức tạp như vậy (chỉ cần bằng một ngôn ngữ như C). – EOL

+0

Tôi đang hướng đến việc giải thích người hỏi cách mã của anh ấy hoạt động như thế nào. Suy nghĩ và đóng khung thuật toán trong tâm trí của người hỏi là động cơ chính của tôi. Và vì đó là một câu hỏi rất dễ, nên anh ta đã đề nghị rõ ràng cho thấy điểm yếu của người hỏi trong việc chuyển đổi các yêu cầu của mình thành mã số. Tôi đồng ý với tất cả(), nhưng nó phải là phần sau của lời giải thích, nếu không sinh viên sẽ chỉ đơn giản tin rằng "Ồ, chức năng này làm công việc của tôi, những người quan tâm những gì đang xảy ra bên trong". Tôi không muốn người mới nghĩ theo cách đó. –

+0

@RaviOjha cảm ơn bạn đã giải thích :) nó giúp tôi rất nhiều! –

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