Python-创建卡片组-For循环错误

Python-创建卡片组-For循环错误,python,Python,我想使用嵌套的for循环在python中创建一副卡片。我首先测试了输出,得到了一个意外的结果 suit = ('Hearts','Clubs','Spades','Diamonds') rank = ('Ace','Two','Three','Four','Five','Six','Seven','Eight','Nine','Ten','Jack','Queen','King') for suit in suit: for rank in rank: print(ra

我想使用嵌套的for循环在python中创建一副卡片。我首先测试了输出,得到了一个意外的结果

suit = ('Hearts','Clubs','Spades','Diamonds')
rank = ('Ace','Two','Three','Four','Five','Six','Seven','Eight','Nine','Ten','Jack','Queen','King')

for suit in suit:
    for rank in rank:
        print(rank + " of " + suit)
结果如下:

Ace of Hearts
Two of Hearts
Three of Hearts
Four of Hearts
Five of Hearts
Six of Hearts
Seven of Hearts
Eight of Hearts
Nine of Hearts
Ten of Hearts
Jack of Hearts
Queen of Hearts
King of Hearts
K of Clubs
i of Clubs
n of Clubs
g of Clubs
g of Spades
g of Diamonds

看看最后6个字母在“国王”中是如何传播的。我不知道这是怎么发生的,似乎仍然无法修复它。

不要在循环中为变量命名为与正在迭代的集合相同的名称:

suits = ('Hearts','Clubs','Spades','Diamonds')
ranks = ('Ace','Two','Three','Four','Five','Six','Seven','Eight','Nine','Ten','Jack','Queen','King')

for suit in suits:
    for rank in ranks:
        print(rank + " of " + suit)

将列表重命名为suites而不是suit,将ranks而不是rank。

基本上,您所做的是在for循环中重新定义rank。在嵌套for循环的第一个终止处,
rank='King'
,因为它是上面定义的元组
rank
中的最后一个东西。因此,在外部for循环的第二次迭代中,rank将成为
'King'
,python将迭代该字符串的每个字符,并将其用作rank变量

为了解决这个问题,您应该将
suit
rank
的两个元组的名称更改为不同的名称,如
suits
ranks
。固定版本如下所示:

suits = ('Hearts','Clubs','Spades','Diamonds')
ranks = ('Ace','Two','Three','Four','Five','Six','Seven','Eight','Nine','Ten','Jack','Queen','King')

for suit in suits:
    for rank in ranks:
        print(rank + " of " + suit)

为什么不改用
itertools.product(*[rank,suit])
?它返回一个元组列表,其中(rank,suit)是。成功了。谢谢