【发布时间】:2022-01-02 05:20:40
【问题描述】:
我正在尝试创建一副牌,将其洗牌,然后重新排序。
问题是当我在洗牌后对其进行排序时,列表最终是这样的:[10, 11, 12, 13, 8, 9]
例如,我使用了一个较小的牌组。有了完整的套牌,列表仍然会结束:[10, 11, 12, 13, 1, 2, ...]
为什么列表没有正确排序?
这是我的代码:
import random
# Initialize Deck
deck = []
suits = ['Club', 'Spade', 'Heart', 'Diamond']
for i in range(8, 14):
for s in range(4):
deck.append([str(i), suits[s]])
# Format numbers into card face
for i in range(len(deck)):
if deck[i][0] == "1":
deck[i][0] = "Ace"
elif deck[i][0] == "11":
deck[i][0] = "J"
elif deck[i][0] == "12":
deck[i][0] = "Q"
elif deck[i][0] == "13":
deck[i][0] = "K"
print("Initial deck", deck)
print()
# Shuffle Deck
random.shuffle(deck)
print("Shuffle function:", deck)
# Turn face back to number for sorting
for i in range(len(deck)):
if deck[i][0] == "Ace":
deck[i][0] = "1"
elif deck[i][0] == "J":
deck[i][0] = "11"
elif deck[i][0] == "Q":
deck[i][0] = "12"
elif deck[i][0] == "K":
deck[i][0] = "13"
deck.sort()
print("Sort function: ", deck)
输出:
Initial deck: [['8', 'Club'], ['8', 'Spade'], ['8', 'Heart'], ['8', 'Diamond'], ['9', 'Club'], ['9', 'Spade'], ['9', 'Heart'], ['9', 'Diamond'], ['10', 'Club'], ['10', 'Spade'], ['10', 'Heart'], ['10', 'Diamond'], ['J', 'Club'], ['J', 'Spade'], ['J', 'Heart'], ['J', 'Diamond'], ['Q', 'Club'], ['Q', 'Spade'], ['Q', 'Heart'], ['Q', 'Diamond'], ['K', 'Club'], ['K', 'Spade'], ['K', 'Heart'], ['K', 'Diamond']]
Shuffle function: [['J', 'Heart'], ['8', 'Club'], ['Q', 'Spade'], ['9', 'Diamond'], ['9', 'Heart'], ['10', 'Diamond'], ['K', 'Heart'], ['K', 'Spade'], ['10', 'Heart'], ['9', 'Club'], ['8', 'Heart'], ['K', 'Club'], ['8', 'Diamond'], ['Q', 'Diamond'], ['9', 'Spade'], ['Q', 'Heart'], ['10', 'Spade'], ['K', 'Diamond'], ['J', 'Diamond'], ['Q', 'Club'], ['10', 'Club'], ['8', 'Spade'], ['J', 'Spade'], ['J', 'Club']]
Sort function: [['10', 'Club'], ['10', 'Diamond'], ['10', 'Heart'], ['10', 'Spade'], ['11', 'Club'], ['11', 'Diamond'], ['11', 'Heart'], ['11', 'Spade'], ['12', 'Club'], ['12', 'Diamond'], ['12', 'Heart'], ['12', 'Spade'], ['13', 'Club'], ['13', 'Diamond'], ['13', 'Heart'], ['13', 'Spade'], ['8', 'Club'], ['8', 'Diamond'], ['8', 'Heart'], ['8', 'Spade'], ['9', 'Club'], ['9', 'Diamond'], ['9', 'Heart'], ['9', 'Spade']]
【问题讨论】:
-
这叫自然排序,使用字母值进行排序。当你比较整数时,
10 > 2但是当你比较字符串时,'10' < '2'因为字符'1'在字符'2'之前 -
把整数放在你的列表中,而不是它们的字符串表示,这样可以正常工作
-
不是来回转换,而是存储整数值,并具有将它们转换为字符串以进行打印的函数。或者使用
Enum类型,它或多或少会自动执行此操作。