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

在Python2.7中,如何打印列表中的值及其索引号?,python,python-2.7,list,random,indexing,Python,Python 2.7,List,Random,Indexing,我正在尝试用python制作一个21点游戏。我遇到了一个问题,因为我试图在游戏中使用随机模块。我使用随机模块获得一个与列表中的索引号相协调的数字。我列出的名单包括卡片的面值。不过,我不知道如何使用随机索引号打印这些值。这是我的密码: # this is a blackjack game made in python import random import time # make a list full of the card values cards = (["A", "K", "Q", "

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

# 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)

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

您可以直接为卡片编制索引,例如:

print(cards[indexNum1])
但是,如果希望在循环中运行,则应迭代索引:

for cardidx in (indexNum1, indexNum2, indexNum3, indexNum4, indexNum5):
    print(cards[cardidx])
但是,这比您需要的要困难得多,因为当前您的代码可能返回
5
Aces-我假设您不希望:

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)

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

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)
这可以跟踪牌组,字面上是洗牌,这是一个方便的随机函数,然后从牌组中“抽牌”(
pops
)。你必须跟踪牌组,这样你就可以,例如,画4个A,但这样就不会有更多的A了。这种方法在纸牌绘制中也是持久的——当你从牌组中绘制纸牌时,它们实际上会被移除,因此你在整个游戏中也不能绘制超过4张A。如果你试图从空牌堆中抽牌,它会崩溃,尽管你可以在
draw_cards
中放入
if
语句,在需要时重新填充牌堆,但你应该知道,如果牌堆用完,这会发生-可能会导致游戏中出现5张a这样的奇怪情况

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


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

如果您想随机选择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]

谢谢你,阿坎皮恩。我如何在代码中使用它?然而,从一个普通的牌组中获得4个a是可能的。为了获得完全的真实感,你必须构建一整副牌,从字面上看,洗牌并从牌的顶部弹出。或者,您可以在
*4
卡定义的末尾添加
*4
以使代码正常工作。确实如此,但使用
itertools.product()
创建一个完整的卡组相当容易,例如
卡=itertools.product([“a”、“K”、“Q”、“J”、2、3、4、5、6、7、8、9、10]、“H”、“S”、“D”、“C”)
现在,我如何才能将这些打印卡的值相加