繁体   English   中英

Python 中的循环帮助……以特定顺序重新排序卡片

[英]Loops Help in Python… reordering cards in a specific order

因此,我在 python 中编写了以下程序,该程序创建了一副扑克牌。

suits = ["Clubs", "Diamonds", "Hearts", "Spades"]
values = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]
deck = []  # creates an empty List
for s in suits:
    for v in values:
        deck.append(v + " of " + s)
print (deck)

现在,使用最小列表,我想让我的程序使原来的第一张牌是第一张,原来的最后一张牌是第二张,原来的第二张牌是第三张,原来的倒数第二张牌是第四张,依此类推,直到所有卡片在他们的新位置。 我应该如何实现这一目标?

我学到的东西是排序、反转、删除、索引、计数和弹出

感谢您的帮助::)

您可以通过遍历列表的一半并从开始和结束添加值来做到这一点:

suits = ["Clubs", "Diamonds", "Hearts", "Spades"]
values = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]
deck = []  # creates an empty List
for s in suits:
    for i in range(len(values)//2 + 1):
        card_from_start = values[i] + " of " + s
        deck.append(card_from_start)
        if i < 6:
          card_from_end = values[(i + 1) * -1] + " of " + s
          deck.append(card_from_end)

for card in deck:
    print(card)

它将产生以下 output:

Ace of Clubs
King of Clubs
2 of Clubs
Queen of Clubs
3 of Clubs
Jack of Clubs
4 of Clubs
10 of Clubs
5 of Clubs
9 of Clubs
6 of Clubs
8 of Clubs
7 of Clubs
... # and so on

您可以使用双端队列执行以下操作:

from collections import deque

suits = ["Clubs", "Diamonds", "Hearts", "Spades"]
values = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]
deck = []  # creates an empty List
for s in suits:
    for v in values:
        deck.append(v + " of " + s)
new_deck = []
deque_deck = deque(deck)
while deque_deck:
    new_deck.append(deque_deck.popleft())
    new_deck.append(deque_deck.pop())
print (deck)
print(new_deck)

new_deck 的new_deck将是:

['Ace of Clubs', 
'King of Spades', 
'2 of Clubs', 
'Queen of Spades', 
'3 of Clubs',
...

逻辑很简单:从牌组中取出第一张牌并将其添加到新牌组中。 从牌组中取出最后一张牌并将其添加到新牌组中。 重复直到你原来的甲板是空的。

如果您不允许使用双端队列:

while deck:
    new_deck.append(deck.pop(0))
    new_deck.append(deck.pop())
print(new_deck)

基本上只有pop相同。

我们可以把这副牌当作一叠牌。 我们需要在交替步骤中获取此堆栈的顶部和底部卡,直到堆栈为空。

因此,在偶数情况下,我们需要获得牌组的底牌,而在奇数情况下,我们需要获得牌组的顶牌。 我们想在原始列表中有元素时重复。

我们可以使用list.pop()方法从列表中所需索引处获取元素。 关于pop()方法的文档可以在Python 数据结构官方教程中找到。

我在以下代码库中实现了这个逻辑:

import json


suits = ["Clubs", "Diamonds", "Hearts", "Spades"]
values = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]
deck = []  # creates an empty List
for s in suits:
    for v in values:
        deck.append(v + " of " + s)

print("Original List: ")
print(json.dumps(deck, indent=4))
print("")

sfuffled_deck = []

count = 0

while len(deck):
    if count%2 == 1:
        sfuffled_deck.append(deck.pop())
    else:
        sfuffled_deck.append(deck.pop(0))
    count+=1

print("Shuffled List: ")
print(json.dumps(sfuffled_deck, indent=4))

Output:

Original List: 
[
    "Ace of Clubs",
    "2 of Clubs",
    "3 of Clubs",
    "4 of Clubs",
    "5 of Clubs",
    "6 of Clubs",
    "7 of Clubs",
    "8 of Clubs",
    "9 of Clubs",
    "10 of Clubs",
    "Jack of Clubs",
    "Queen of Clubs",
    "King of Clubs",
    "Ace of Diamonds",
    "2 of Diamonds",
    "3 of Diamonds",
    "4 of Diamonds",
    "5 of Diamonds",
    "6 of Diamonds",
    "7 of Diamonds",
    "8 of Diamonds",
    "9 of Diamonds",
    "10 of Diamonds",
    "Jack of Diamonds",
    "Queen of Diamonds",
    "King of Diamonds",
    "Ace of Hearts",
    "2 of Hearts",
    "3 of Hearts",
    "4 of Hearts",
    "5 of Hearts",
    "6 of Hearts",
    "7 of Hearts",
    "8 of Hearts",
    "9 of Hearts",
    "10 of Hearts",
    "Jack of Hearts",
    "Queen of Hearts",
    "King of Hearts",
    "Ace of Spades",
    "2 of Spades",
    "3 of Spades",
    "4 of Spades",
    "5 of Spades",
    "6 of Spades",
    "7 of Spades",
    "8 of Spades",
    "9 of Spades",
    "10 of Spades",
    "Jack of Spades",
    "Queen of Spades",
    "King of Spades"
]

Shuffled List: 
[
    "Ace of Clubs",
    "King of Spades",
    "2 of Clubs",
    "Queen of Spades",
    "3 of Clubs",
    "Jack of Spades",
    "4 of Clubs",
    "10 of Spades",
    "5 of Clubs",
    "9 of Spades",
    "6 of Clubs",
    "8 of Spades",
    "7 of Clubs",
    "7 of Spades",
    "8 of Clubs",
    "6 of Spades",
    "9 of Clubs",
    "5 of Spades",
    "10 of Clubs",
    "4 of Spades",
    "Jack of Clubs",
    "3 of Spades",
    "Queen of Clubs",
    "2 of Spades",
    "King of Clubs",
    "Ace of Spades",
    "Ace of Diamonds",
    "King of Hearts",
    "2 of Diamonds",
    "Queen of Hearts",
    "3 of Diamonds",
    "Jack of Hearts",
    "4 of Diamonds",
    "10 of Hearts",
    "5 of Diamonds",
    "9 of Hearts",
    "6 of Diamonds",
    "8 of Hearts",
    "7 of Diamonds",
    "7 of Hearts",

我使用json.dumps()来漂亮地打印 output。

这可以通过不同的方式解决。 由于这是一个教程任务,我建议尝试这个问题的每个解决方案。

更新了没有 len 方法和 json 的代码

suits = ["Clubs", "Diamonds", "Hearts", "Spades"]
values = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]
deck = []  # creates an empty List
for s in suits:
    for v in values:
        deck.append(v + " of " + s)

print("Original List: ")
print(deck)
print("")

shuffled_deck = []

count = 0

while deck:
    if count%2 == 1:
        shuffled_deck.append(deck.pop())
    else:
        shuffled_deck.append(deck.pop(0))
    count+=1

print("Shuffled List: ")
print(shuffled_deck)

Output:

Original List: ['Ace of Clubs', '2 of Clubs', '3 of Clubs', '4 of Clubs', '5 of Clubs', '6 of Clubs', '7 of Clubs', '8 of Clubs', '9 of Clubs', '10 of Clubs', 'Jack of Clubs', 'Queen of Clubs', 'King of Clubs', 'Ace of Diamonds', '2 of Diamonds', '3 of Diamonds', '4 of Diamonds', '5 of Diamonds', '6 of Diamonds', '7 of Diamonds', '8 of Diamonds', '9 of Diamonds', '10 of Diamonds', 'Jack of Diamonds', 'Queen of Diamonds', 'King of Diamonds', 'Ace of Hearts', '2 of Hearts', '3 of Hearts', '4 of Hearts', '5 of Hearts', '6 of Hearts', '7 of Hearts', '8 of Hearts', '9 of Hearts', '10 of Hearts', 'Jack of Hearts', 'Queen of Hearts', 'King of Hearts', 'Ace of Spades', '2 of Spades', '3 of Spades', '4 of Spades', '5 of Spades', '6 of Spades', '7 of Spades', '8 of Spades', '9 of Spades', '10 of Spades', 'Jack of Spades', 'Queen of Spades', 'King of Spades'] 

Shuffled List: ['Ace of Clubs', 'King of Spades', '2 of Clubs', 'Queen of Spades', '3 of Clubs', 'Jack of Spades', '4 of Clubs', '10 of Spades', '5 of Clubs', '9 of Spades', '6 of Clubs', '8 of Spades', '7 of Clubs', '7 of Spades', '8 of Clubs', '6 of Spades', '9 of Clubs', '5 of Spades', '10 of Clubs', '4 of Spades', 'Jack of Clubs', '3 of Spades', 'Queen of Clubs', '2 of Spades', 'King of Clubs', 'Ace of Spades', 'Ace of Diamonds', 'King of Hearts', '2 of Diamonds', 'Queen of Hearts', '3 of Diamonds', 'Jack of Hearts', '4 of Diamonds', '10 of Hearts', '5 of Diamonds', '9 of Hearts', '6 of Diamonds', '8 of Hearts', '7 of Diamonds', '7 of Hearts', '8 of Diamonds', '6 of Hearts', '9 of Diamonds', '5 of Hearts', '10 of Diamonds', '4 of Hearts', 'Jack of Diamonds', '3 of Hearts', 'Queen of Diamonds', '2 of Hearts', 'King of Diamonds', 'Ace of Hearts']

您可以使用insert而不是append然后您可以在列表的任何 position 中添加新值

deck.insert(0,v + " of " + s)

使用这一行,您将添加任何新值到列表的开头,所有数据都将在之后

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM