2017-08-29 22 views
-1

我想在python中做一個二十一點遊戲。我遇到了一個問題,因爲我試圖在遊戲中使用隨機模塊。我使用隨機模塊獲取與列表中的索引號相匹配的數字。我做的名單包括卡片面值。但我不知道如何使用隨機索引號打印這些值。這裏是我的代碼:如何用Python 2.7中的索引號打印列表中的值?

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

我希望有人能幫我解決這個問題。謝謝!

+0

謝謝AChampion。我將如何在代碼中使用它? –

回答

5

可以指數cards直接,如:

print(cards[indexNum1]) 

但是如果你想在一個循環中,你應該遍歷指標:

for cardidx in (indexNum1, indexNum2, indexNum3, indexNum4, indexNum5): 
    print(cards[cardidx]) 

但你使這個更難比你的需要因爲目前你的代碼可能會返回5王牌 - 我認爲你不想要:

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) 
+0

但是可以從普通甲板上獲得4個ace。對於完整的現實主義,你必須建立一個完整的套牌,從字面上「洗牌」它,並從甲板上方做出爆裂。或者,您可以在'cards'定義的末尾添加'* 4',以使您的代碼正常工作。 –

0

如果你要正確地模擬一副牌,你就必須做到這一點:

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個ace,但不會有任何更多的左邊。這種方法在卡牌圖紙中也是持續不變的 - 當你從卡組中取出卡牌時,他們實際上被移除了,所以你在整個遊戲中也不能得到4個以上的A。如果你嘗試從空套牌中抽牌,它會崩潰,雖然你可以在draw_cards中加入if聲明以便在需要時重新裝滿套牌,但是你應該意識到如果套牌用完就會發生這種情況 - 這可能會導致奇怪的事情就像一場比賽中的5個ace一樣。

我已經將所有的數字都改爲了字符串,因爲如果某些卡片不是整數,它們就沒有用作整數。 (另一種方法是將它們全部保留爲整數,你可以用range函數 - 猜測range(13),或者如果你想從2,range(2, 15)去做)。我還將10更改爲0,因爲0未使用,這使得它更加簡潔。如果你願意,應該很容易改變回來。

這和其他方法的區別在於其他方法從不刪除卡片(pop)。他們只是隨機挑選卡片,然後將它們放回,儘管它們已被繪製。

+0

現在我將如何將這些打印的卡片值添加到一起 –

0

如果你想隨機選擇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] 
相關問題