每次for循环迭代时添加到列表(Python)?

时间:2017-06-28 09:58:14

标签: python

我正在开发一个程序,创建一组卡然后打印它们,到目前为止工作正常。但是,我无法弄清楚如何以一定数量的卡片或单张卡片与另一套卡片相比较的方式存储每张卡片。

我用来“画”牌的功能是:

def TableHand():
    print("Table Hand:")
    for i in range(0,5):
        print(RandomCardDraw(), "of", RandomHouseDraw())

函数“RandomCardDraw”和“RandomHouseDraw”都只是绘制一个随机数和房子。

我想对最终的打印结果进行排序,例如 - 7个心,然后是列表/词典中的下一个“卡片”或者让我将“表”与用户手进行比较的东西?

如果可能,因为我之前的功能编码方式是否可行?如果需要更多信息来回答我可以提供XD。

感谢。

3 个答案:

答案 0 :(得分:2)

class_obj仅用于展示内容,而非用于存储内容。以下是如何将所有卡片(每个卡片由两个元素的元组表示)放入一个集合中并检索它:

print

(这是一个理解的好地方,但我不认为你已为此做好准备)

答案 1 :(得分:1)

Alex Hall为提供一个集合提供了一个很好的答案,我想针对您提到的某些特定数据类型进行扩展:

  

我想对最终的打印结果进行排序,例如 - 7个心,然后是列表/词典中的下一个“卡片”或者让我将“表”与用户手进行比较的东西?

列表

如果您只想将元组放在列表中,请执行以下操作:

def TableHand():
    hand = []
    for i in range(0, 5):
        card = (RandomCardDraw(), RandomHouseDraw())
        hand.append(card)
    return hand

列表很容易迭代并执行各种操作。正如亚历克斯所说,你可能还没准备好理解,所以列表可能是一个更合适的起点。

词典

将卡片作为一组存储在字典中可能是一种不好的方法。字典很适合表示更像个别对象而不是对象集合的东西。你真的需要知道你将获得多少元素,并且必须有一种标准方法来命名它们,因此动态地执行它是繁琐的,而不是真正设计的字典。然而...

词典列表

不是将卡存储为元组,而是可以这样做:

def TableHand():
    hand = []
    for i in range(0, 5):
        card = { "number": RandomCardDraw(), "house": RandomHouseDraw())
        hand.append(card)
    return hand

注意:我已经假设你想要给出这些元素的名称,“数字”和“房子”。

通过词典列表,您可以更轻松地理解和操作,因为您正在寻找的内容变得更加清晰。在这种情况下,您可以使用first_card = hand[0]获取返回手中的第一张卡片,然后您可以使用house = first_card["house"]获取房屋(或您在字典中命名的任何内容)。

排序和比较

有一些方法可以对列表进行排序并将它们与其他列表进行比较 - 实际上,在您的情况下,它实际上可能不会那么困难。但最简单的方法是设置理解,在这种情况下,你应该用Alex建议的解决方案解决问题。

答案 2 :(得分:0)

您可以预先生成一副牌,这样可以更轻松地进行排序,并确保您没有任何重复的卡片,因为如果您在未经检查的情况下即时生成它们,则可能会出现这种情况。

这是我之前做过的事情,西装变量包含d代表钻石,h代表心灵等等。排名以相同的方式输入。现在为主要部分,甲板。甲板变量将是类型列表,其中每个项目是卡片中的卡片。 itertools.product()遍历排名和套装,并在变量item中的元组中将它们连接在一起。 .join()获取每个项目并加入等级并适合用破折号将它们分开。

suits = 'dhcs'
ranks = '234567890JQKA'
deck = []
for item in itertools.product(ranks, suits):
    '-'. join(item)
    deck.append(item)

要随机选择卡片,您可以从卡片中随机选择一个项目,并确保将其删除。

现在是棘手的部分,整理卡片。您可以创建第二个函数,为每个卡分配一个值。

def giveValue(card):
    if card[2] == "A":
        return 14 
    if card[2] == "K":
        return 13

您可以通过下拉字符串并为每个等级添加值来完成此功能。这为您提供了对每张卡片进行排序的数字。

希望这有一些用处。