2017-02-18 20 views
-3

これは、カードの画像を使用するブラックジャックゲームを作成しようとしているので、私はうまく動作しています。より効率的なカードを表示する別の方法になります。私は必要なすべてのカードのリストを持っていて、変数の値ではなく、その中の変数名を参照したいと思います。これに伴う問題は、それがジャック、女王や王を区別does notのですがPython - 値を参照せずにリストの項目(変数)を参照する方法

Jack = 10 
Queen = 10 
King = 10 
Ace = 11  
cards = [ACE, 2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King] 

firstcard = cards[random.randrange(1,14)] 
seccard = cards[random.randrange(1,14)] 
total = firstcard + seccard 

:、私のコードのHERESにいくつかを明確にするのに役立ちます。 ID次のラインに沿って行くだろうif文を使用したい:

if firstcard = cards[Jack]: 
    (code for using the appropriate image) 

再び、ここでの問題は、コンピュータが常にインデックス名を通じて見て、変数が(中に等しい何を見ていることですこの場合10)。 idは、変数の値ではなく変数名を直接参照する方法を知っています。私はすでにカードイメージをうまく使っています。これは単に今すぐ選択したものです。

ご協力いただきありがとうございます。

+0

私はあなたがPythonで辞書を見ていると思います。これにより、異なるインデックス値を提供し、それに対応する値を取得できます。 –

答えて

0

最終的にここで辞書を使いたいと思っています。

0

まず、===の違いに注意してください。前者のa = bは、に等しいaを設定します。後者のa == baまたはbを変更せず、同じ場合はTrueを、そうでない場合はFalseを返します。

フェイスカードを番号10と区別する方法は、カードを文字列として保存し、辞書を使用して各カードの値から数字を抽出すると便利です。

# store the cards as strings 
cards = ["Ace", "2", "3", ..., "9", "10", "Jack", "Queen", "King"] 
# use a dictionary to store the value of each string 
values_of_cards = {"Ace": 1, "2": 2, ..., "10": 10, "Jack": 10, "Queen": 10, "King": 10} 
# same code to find the first and second card, only they're strings now 
first_card = cards[random.randomrange(1, 14)] 
second_card = cards[random.randomrange(1, 14)] 
# slight change on how you calculate the values of the cards 
total = values_of_cards[first_card] + values_of_cards[second_card] 
# figuring out what card you have is now super easy -- just make sure to use == instead of = 
if first_card == "Jack": 
    # code here 
0

あなたは値によって、あなたの変数への参照のうえとジャック、女王、王と10以来だが、彼らがPythonインタプリタに同じに見えるコースの10の値を持っています。

同じ値でも表現が異なる場合は、少し複雑な構造を使用する必要があります。あなたがそれを行うだけのためのOOPの方法であれば

cards = { 
    "two": 2, "three": 3, "four": 4, "five": 5, "six": 6, "seven": 7, "eight": 8, "nine": 9, 
    "ten": 10, "jack": 10, "queen": 10, "king": 10, "ace": 11 
} 
card_names = cards.keys() 

# you can now create shortcuts like ACE = "ace" if you don't want to type string keys 

# to generate the cards 
first_card = random.choice(card_names) 
second_card = random.choice(card_names) 

# to get their total value 
total = cards[first_card] + cards[second_card] 

# and to check the card: 
if first_card == "jack": 
    print("It's a Jack!") 

しかし、これははるかにエレガント(および特定の場合にはよりパフォーマンス)になります:dictのは、おそらく理解することが最も簡単です。

関連する問題