在Python2.7中,如何打印带有索引号的列表中的值?

2024-04-25 17:53:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用python制作21点游戏。我遇到了一个问题,因为我试图在我的游戏中使用随机模块。我使用random模块得到一个与列表中的索引号相协调的数字。我列的单子上有面值。不过,我不知道如何使用随机索引号打印这些值。这是我的代码:

# this is a blackjack game made in python
import random
import time

# make a list full of the card values
cards = (["A", "K", "Q", "J", 2, 3, 4, 5, 6, 7, 8, 9, 10])

indexNum1 = random.randint(0,12)
indexNum2 = random.randint(0,12)
indexNum3 = random.randint(0,12)
indexNum4 = random.randint(0,12)
indexNum5 = random.randint(0,12)

for card in cards:
    print card(indexNum1)
    print card(indexNum2)
    print card(indexNum3)
    print card(indexNum4)
    print card(indexNum5)

我希望有人能帮我解决这个问题。谢谢!在


Tags: 模块inimport游戏列表randomcardcards
3条回答

如果你想不重复地随机选择k张卡片并保留索引,这可能有助于:

import random

cards = (["A", "K", "Q", "J", 2, 3, 4, 5, 6, 7, 8, 9, 10])
indices = random.sample(range(len(cards)), k=5)
print 'Indices are:', indices, '\nCards chosen are:',[cards[index] for index in indices]

如果要正确模拟一副牌,则必须执行以下操作:

import random

def clean_deck():
    return list("AJQK234567890") * 4

def draw_cards(deck, n):
    return [deck.pop() for _ in range(n)]

deck = clean_deck()
random.shuffle(deck)

for card in draw_cards(deck, 5):
    print(card)

这将跟踪卡片组,字面上是shuffles它们,这是一个方便的random函数,然后从卡片组(pops)中“提取”。你必须保持对牌组的跟踪,这样你就可以,例如,画4个A,但这样就不会有更多的了。这种方法在纸牌绘制中也是持续的-当你从牌堆中抽牌时,它们实际上是被移除的,所以你在整个游戏中也不能画出超过4张A。如果你试图从一个空牌堆中抽取,它会崩溃,尽管你可以在draw_cards中放入一个if语句来填充牌堆,但是你应该知道,如果牌堆用完了,就会发生这种情况——这可能会导致游戏中出现5个a。在

我把你所有的数字都改成了字符串,因为如果有些卡片不是整数,它们就没有用做整数了。(另一种方法是将它们全部保留为整数,这可以通过range函数来实现——猜测一下range(13),或者如果您想从2开始,range(2, 15))。我还将10改为0,因为0没有使用,这使得它更加简洁。如果你想换回来应该很容易。在

这种方法与其他方法的区别在于,其他方法从不移除卡(pop)。他们只是随机挑选卡片,然后把它们放回原处,尽管它们已经被抽走了。在

您可以直接索引cards,例如:

print(cards[indexNum1])

但是,如果您想在循环中循环,则应该迭代索引:

^{pr2}$

但这比您需要的要困难得多,因为目前您的代码可能会返回5Aces—我假设您不希望:

cards = ["A", "K", "Q", "J", 2, 3, 4, 5, 6, 7, 8, 9, 10]
hand = random.sample(cards, k=5)
for card in hand:
    print(card)

相关问题 更多 >