2013-05-24 16 views
5

Zrobiłem pracę domową o grze serca z inną wersją. Mówi, że jeśli dostaniemy listę mycards, która zawiera wszystkie karty, które gracz aktualnie trzyma w swoich rękach. I gra jest pojedynczą kartą, która reprezentuje potencjalną kartę. Jeśli ich wszystkie karty zawierają HEART (H) lub QUEEN OF SPADES (QS), zwróci ona wartość True.Jak sprawdzić wszystkie elementy na liście, które mają określone wymagania?

Na przykład

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

on wróci prawda

to co próbowałem

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

Ale myślę, że moje kody po prostu sprawdzić jeden QS i jeden H w lista. Jak sprawić, aby kody zawierały kod QS lub H?

Odpowiedz

10

Twój opis mapy bezpośrednio do roztworu:

Edited dla jasności:

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

Eh? Dlaczego tu spadł? –

+0

Och prawda prawda Potrzebuję kawy +1 – jamylak

+0

Dziękuję bardzo –

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

Nie jestem pewien, jak to się różni od tego, co napisał Thomas. –

+0

Nie sądzę, że 'x [-1] == 'H'' jest potrzebny - o ile wiem (i kawa jest w drodze), tylko jeden kolor w talii kart zaczyna się od' H'. –

+0

+1, ponieważ oryginalne pytanie zawiera odpowiednik "x [1]". Jest to również szybsze niż ''H' wx'. – EOL

2

Od momentu swojej „Homework” ja nie zamierzam dostarczyć gotową kodu. :)

iteracyjne nad listy za pomocą pętli:

dla np .:

for el in mycards: 

w każdej iteracji trzeba sprawdzić, czy którykolwiek z tych dwóch warunków jest spełniony, czy nie.

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

jeśli karta jest albo królową pik, albo serce powyżej stanu będzie prawdą. Mam nadzieję, że dostaniesz to do teraz. A jeśli warunek nie jest prawdziwy, po prostu zwróć Fałsz.

Jeśli wszystkie elementy na twoich listach są sprawdzane za pomocą pętli, a jednak żadna z nich nie została zwrócona, stąd wszystkie karty są albo Królową Pik albo Sercem. Tak zwraca True po zakończeniu pętli.

Spróbuj na własną rękę przez jakiś czas, jeśli wciąż nie będę pisać kod na żądanie (ale musisz mi pokazać, czego próbowałem: p)

Edit: skoro” ve próbowałem tego, również publikuję kod.

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 ma 'all()', więc ludzie nie muszą wymyślać koła jak tutaj, i dlatego znaczenie ich kodu jest o wiele bardziej oczywiste. Nie zachęciłbym nikogo do korzystania z tak skomplikowanego rozwiązania (które jest potrzebne tylko w języku takim jak C). – EOL

+0

Dążyłem do wyjaśnienia pytającemu, jak powinien działać jego kod. Myślenie i kadrowanie algorytmu w umyśle pytającego było moim głównym motywem. A ponieważ było to bardzo łatwe pytanie, a mimo to zapytał wyraźnie, sugeruje słabość pytającego w zamianie jego wymagań na kody. Zgadzam się ze wszystkimi(), ale powinno to być późniejsze wyjaśnienie, inaczej studenci po prostu uwierzą, że "Och tak, ta funkcja wykonuje moją pracę, kogo to obchodzi, co się dzieje w środku". Po prostu nie chcę, żeby nowicjusz tak myślał. –

+0

@RaviOjha dziękuję za wyjaśnienia :) bardzo mi to pomaga! –

Powiązane problemy