5

我正在做一个关于不同版本的心脏游戏的作业。它说,如果给我们一个mycards列表,其中包含玩家当前持有的所有卡片。并且游戏是一张代表潜在牌的单张牌。如果他们所有的牌都包含 HEART( H) 或 QUEEN OF SPADES( QS),它将返回 True。

例如

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

它将返回 True

这是我尝试过的

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

但我认为我的代码只检查列表中的一个 QS 和一个 H。如何制作包含allQS 或 H 的代码?

4

3 回答 3

10

您的描述直接映射到解决方案:

为清楚起见进行了编辑:

mycards= ['0H','8H','7H','6H','AH','QS'] 
all((x == 'QS' or 'H' in x) for x in mycards)
#  True
于 2013-05-24T06:26:42.633 回答
5
>>> mycards= ['0H','8H','7H','6H','AH','QS']
>>> all(x[-1] == 'H' or x == 'QS' for x in mycards)
True
于 2013-05-24T06:27:35.927 回答
2

由于它是您的“作业”,因此我不会为您提供现成的代码。:)

使用循环遍历列表:

例如:

for el in mycards:

在每次迭代中,您必须检查两个条件中的任何一个是否为真。

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

如果卡是黑桃皇后或心以上条件将为真。希望你能得到它直到现在。如果条件不成立,只需返回 False。

如果循环检查列表中的所有元素,但没有返回 False,则所有卡片要么是黑桃皇后,要么是红心。所以在循环结束后返回 True 。

自己尝试一段时间,如果仍然没有得到,我会根据您的要求发布代码(但您必须向我展示您尝试过的内容:p)

编辑:既然你已经尝试过了,我也在发布代码。

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
于 2013-05-24T06:44:40.227 回答