2013-05-24 2 views
5

Я делаю домашнее задание о игре в сердце с другой версией. В нем говорится, что если нам дается список mycards, который содержит все карты, которые игрок удерживает в настоящее время в руках. И играют - это единственная карта, представляющая потенциальную карту. И если все, то их карты содержат либо СЕРДЦЕ (H), либо QUEEN OF SPADES (QS), это собирается вернуть True.Как проверить все элементы в списке с конкретным требованием?

Например

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

Он вернется Правда

это то, что я попытался

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

Но я думаю, что мои коды просто проверить один QS и один H в список. Как сделать коды, содержащие all, QS или H?

ответ

10

Ваше описание карты непосредственно к решению:

Edited для ясности:

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

Eh? Почему здесь внизу? –

+0

О, верно, мне нужен кофе +1 – jamylak

+0

Огромное вам спасибо –

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

Не знаете, как это отличается от того, что написал Томас. –

+0

Я не думаю, что 'x [-1] == 'H'' необходим - насколько я знаю (и кофе уже в пути), только один костюм в колоде карт начинается с' H'. –

+0

+1, потому что исходный вопрос содержит эквивалент 'x [1]'. Это также быстрее, чем «H» в x'. – EOL

2

С его ваша «домашняя работа» я не собираюсь предоставить вам готовый код. :)

Итерация по списку с помощью цикла:

для напр .:

for el in mycards: 

на каждой итерации вы должны проверить, либо какой-либо из двух условий истинно или нет.

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

Если карта является либо Королевой Дамы, либо Сердцем выше условия, это будет правдой. Надеюсь, ты доберешься до сих пор. И если условие неверно, просто верните False.

Если все элементы в ваших списках проверяются контуром, и все же не возвращается False, значит, все карты - это Королева Спейда или Сердце. Поэтому верните True после окончания цикла.

Попробуйте самостоятельно на некоторое время, если до сих пор не получаю я выложу код по вашему желанию (но вы должны показать мне, что вы пробовали: р)

Edit: Поскольку вы» Я попробовал это, я тоже отправляю код.

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 имеет 'all()', так что людям не нужно изобретать колесо, как здесь, и поэтому смысл их кода гораздо более очевиден. Я бы никому не рекомендовал использовать такое сложное решение (которое требуется только на языке, таком как C). – EOL

+0

Я старался объяснить, как его код должен работать. Мышление и разработка алгоритма в сознании акита были моим основным мотивом. И так как это был очень простой вопрос, и все же он спросил, ясно говорит, что слабость искателя переводит его требования на коды. Я согласен со всеми(), но все же это должно быть позднее объяснение, иначе студенты просто верят, что «О да, эта функция выполняет мою работу, которая заботится о том, что происходит внутри». Я просто не хочу, чтобы новички так думали. –

+0

@RaviOjha спасибо за объяснение :) это очень помогает мне! –

Смежные вопросы