需要帮助我的洗牌程序

2 投票
3 回答
12322 浏览
提问于 2025-04-16 17:10

我正在做一个洗牌的卡片程序。最后我用一个 for 循环 来打印出10张随机的卡片,但我不知道哪里出错了。

在最后的 deal_card(card) 里,我为什么要放 card,是因为我的硬件这么要求,但如果你有其他的看法,我很乐意听听。

这是我的程序:

import random

def define_cards():
    rank_string = ("ace","two","three","four","five","six","seven","eight","nine","ten","jack","queen","king")
    suit_string = ("clubs","diamonds","hearts","spades")
    cards = []
    for suit in range(4):
        for rank in range(13):
            card_string = rank_string[rank] + " of " + suit_string[suit]
            cards.append(card_string)
        return cards

def create_deck(deck):
    for i in range(52):
        deck.append(i)
        return

def shuffle_deck(deck):
    random.shuffle(deck)
    return

def deal_card(deck):
    return deck.pop(0)

deck=[]

create_deck(deck)
shuffle_deck(deck)
print "The first 10 cards are:"
for i in range(10):             # I don't know why won't work
    deal_card(card)
    print define_cards()

打印出来的结果应该是这样的:

The first 10 cards are:
queen of hearts
ten of diamonds
...

3 个回答

1

你可以考虑创建一个叫做“卡片”的类和一个叫做“牌堆”的类来管理一副牌。这样做会让你的代码更清晰。

3

这段代码有一半是多余的:

>>> import random
>>> deck = range(1,52)
>>> random.shuffle(deck)
>>> deck
[4, 38, 40, 18, 35, 44, 50, 22, 49, 26, 8, 45, 14, 20, 25, 34, 37, 51, 42, 29, 24, 28, 27, 30, 7, 47, 23, 3, 10, 2, 9, 39, 6, 16, 12, 17, 11, 41, 33, 48, 5, 1, 36, 21, 13, 32, 43, 19, 15, 31, 46]
6

因为你的 define_cards 函数已经生成了一堆牌的名字,所以你应该用这个来创建牌堆,而不是用 create_deck。然后在 for 循环里,只需要发一张牌并打印出来。

deck = define_cards()
shuffle_deck(deck)
print "The first 10 cards are:"
for i in range(10):
    card = deal_card(deck)
    print card

这样做的话,程序就会从牌堆的顶部打印出十张牌。不过,define_cards 里还有一个小错误。你能发现吗?提示:看看 return 的位置。

撰写回答