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

每次for循环迭代时添加到列表中(Python)?,python,Python,我在做一个程序,创建一组卡片,然后打印出来,到目前为止效果很好。然而,我一直无法弄清楚如何以一种方式存储每一张卡,以便将一组或多张卡与另一组进行比较 我用来“抽”牌的功能是: def TableHand(): print("Table Hand:") for i in range(0,5): print(RandomCardDraw(), "of", RandomHouseDraw()) 函数“RandomCardDraw”和“RandomHouseDraw”都

我在做一个程序,创建一组卡片,然后打印出来,到目前为止效果很好。然而,我一直无法弄清楚如何以一种方式存储每一张卡,以便将一组或多张卡与另一组进行比较

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

def TableHand():
    print("Table Hand:")
    for i in range(0,5):
        print(RandomCardDraw(), "of", RandomHouseDraw())
函数“RandomCardDraw”和“RandomHouseDraw”都只是绘制一个随机数和一个房子

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

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


谢谢

打印
只是用来显示东西,而不是用来存储东西。以下是如何将所有卡片(每个卡片由两个元素组成的元组表示)放入一个集合并检索它:

def TableHand():
    hand = set()
    for i in range(0, 5):
        card = (RandomCardDraw(), RandomHouseDraw())
        hand.add(card)
    return hand

(这是一个进行集合理解的好地方,但我认为你还没有准备好)

打印只用于显示内容,而不是存储内容。以下是如何将所有卡片(每个卡片由两个元素组成的元组表示)放入一个集合并检索它:

def TableHand():
    hand = set()
    for i in range(0, 5):
        card = (RandomCardDraw(), RandomHouseDraw())
        hand.add(card)
    return hand

(这是理解集合的好地方,但我认为您还没有准备好)

Alex Hall给出了提供集合的好答案,我想就您提到的一些特定数据类型展开讨论:

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

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

def TableHand():
    hand = []
    for i in range(0, 5):
        card = (RandomCardDraw(), RandomHouseDraw())
        hand.append(card)
    return hand
列表非常容易迭代并对其执行各种操作。正如Alex所说,你可能还没有准备好理解集合,所以列表可能是一个更合适的开始

字典 将卡片作为一组存储在字典中可能是一种不好的方法。字典很适合用来表示更像单个对象而不是对象集合的事物。你真的需要知道你将得到多少元素,并且必须有一个命名它们的标准方法,所以动态地这样做是乏味的,而不是字典的设计目的。然而

字典目录 您可以这样做,而不是将卡存储为元组:

def TableHand():
    hand = []
    for i in range(0, 5):
        card = { "number": RandomCardDraw(), "house": RandomHouseDraw())
        hand.append(card)
    return hand
注:我已经假设了你想给这些元素起的名字,“数字”和“房子”

有了字典列表,您的理解和操作就更容易了,因为您要查找的内容更容易访问。在这种情况下,您可以使用
first\u card=hand[0]
获取返回的手上的第一张卡,然后您可以使用
house=first\u card[“house”]
获取房子(或词典中的任何名称)

分类比较
有很多方法可以对列表进行排序,并将它们与其他列表进行比较——事实上,在您的案例中,这甚至可能没有那么困难。但最简单的方法可能是集合理解,在这种情况下,您应该使用Alex建议的解决方案来解决问题。

Alex Hall为提供集合提供了一个很好的答案,我想就您提到的一些特定数据类型展开讨论:

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

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

def TableHand():
    hand = []
    for i in range(0, 5):
        card = (RandomCardDraw(), RandomHouseDraw())
        hand.append(card)
    return hand
列表非常容易迭代并对其执行各种操作。正如Alex所说,你可能还没有准备好理解集合,所以列表可能是一个更合适的开始

字典 将卡片作为一组存储在字典中可能是一种不好的方法。字典很适合用来表示更像单个对象而不是对象集合的事物。你真的需要知道你将得到多少元素,并且必须有一个命名它们的标准方法,所以动态地这样做是乏味的,而不是字典的设计目的。然而

字典目录 您可以这样做,而不是将卡存储为元组:

def TableHand():
    hand = []
    for i in range(0, 5):
        card = { "number": RandomCardDraw(), "house": RandomHouseDraw())
        hand.append(card)
    return hand
注:我已经假设了你想给这些元素起的名字,“数字”和“房子”

有了字典列表,您的理解和操作就更容易了,因为您要查找的内容更容易访问。在这种情况下,您可以使用
first\u card=hand[0]
获取返回的手上的第一张卡,然后您可以使用
house=first\u card[“house”]
获取房子(或词典中的任何名称)

分类比较
有很多方法可以对列表进行排序,并将它们与其他列表进行比较——事实上,在您的案例中,这甚至可能没有那么困难。但最简单的方法可能是集合理解,在这种情况下,您应该使用Alex建议的解决方案来解决问题。

您可以事先生成一副卡片,这将使排序更容易,并确保您没有任何重复的卡片,因为如果您不先检查就动态生成它们,这是一种可能性

这是我以前做过的,suits变量包含d代表钻石,h代表红心等等。等级是以同样的方式打印出来的。现在是主要部分,甲板。deck变量的类型为list,其中每个项都是deck中的一张卡
itertools.product()
遍历等级和套装,并在变量
项中的元组中将它们连接在一起
.join()
接受每件物品,并将等级和套装连接在一起,用破折号将它们分开

suits = 'dhcs'
ranks = '234567890JQKA'
deck = []
for item in itertools.product(ranks, suits):
    '-'. join(item)
    deck.append(item)
要随机选择一张牌,您可以从牌组中随机选择一个项目,并确保将其移除

<