2017-08-29 9 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エースを得ることは可能です。フルリアリズムのためには、デッキ全体を構築しなければならず、文字通り「シャッフル」してデッキの上部からポップを作成する必要があります。あるいは、 '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) 

これは、その後、便利random関数である、文字通りshufflesそれら、カードのデッキを追跡し、デッキから「引く」(pops)。あなたはデッキを追跡して、例えば4エースを引くことができるようにする必要がありますが、それ以上は残っていません。このアプローチは、カード図面全体でも永続的です。カードをデッキから引き出すと、実際には削除されるため、ゲーム全体で4エース以上を描画することもできません。あなたが空のデッキから引き出そうとするとクラッシュしますが、draw_cardsifの声明を入れて、必要に応じてデッキを補充することもできますが、デッキがなくなった場合に起こることに注意してください - ゲームで5エースのように。

一部のカードが整数でない場合、整数としては使用できないため、すべての数字を文字列に変更しました。 (別の方法としては、それらをすべて整数として保持することです。これは、range(13)のようにrange関数で行うことができます。または、2から進めたい場合は、range(2, 15))。また100に変更しました。0は未使用であり、より簡潔になりました。あなたが望むならば、戻すのは簡単にできるはずです。

このアプローチと他のアプローチの違いは、他のアプローチがカード(pop)を決して取り除かないことです。彼らは無作為にカードを選び、それを元に戻しますが、描かれています。

+0

これらのカードの値を一緒に追加するにはどうすればいいですか? –

0

あなたがランダムに繰り返しずにk個のカードを選択し、インデックスを維持したい場合は、この5月に役立ちます:

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] 
関連する問題