2016-12-12 3 views
0

こんにちは私は自分でブラックジャックのゲームを作って初心者のプロジェクトをやっています。それはうまくいっているし、エース値に1または11を選択することさえできる。私の問題は、自分自身のためにデッキからカードを取り除こうとしていることと、ディーラーを追加するときです。リストの値を削除する

ここで私は

from random import randint 
def CardDeck(): 
    #sets the card types and values 
    CardValue = ['Ace','2','3','4','5','6','7','8','9','10','J','Q','K'] 
    CardType = ['Hearts','Spades','Clubs','Diamonds'] 
    Deck = [] 
    Card = randint(0,(len(CardValue)*len(CardType))) 
    #This iterates all 52 cards into a deck 
    for i in CardType: 
     for j in CardValue: 
      Deck.append(j + ' of ' + i) 
    temp = Deck[Card] 
    Deck.remove(Deck[Card]) #this should remove the card from the deck 
    return temp 
+11

カードが 'Deck'から正常に削除されたように見えますが、1行後に機能を終了し、' Deck'が完全に存在しなくなります。関数をもう一度呼び出すと、新しい名前の 'Deck'が作成されます。その名前を持つオブジェクトへの接続は全くありません。 'Deck'が複数の関数呼び出しの状態を維持するようにしたい場合は、毎回関数の中に新しい関数を作成することはできません。 – Kevin

+0

私はこれをどうお勧めしますか?私が想定している機能の外にあるものはすべて持っていますか? –

+2

BTW:Pythonでは、関数名と変数名をsnake_caseで指定し、小文字で始めるのが一般的です。クラス名にはCamelCaseを使用します。 – Pax0r

答えて

2

を使用していますデッキのコードがある私は、私はそれを削除する.remove()関数を行うことができると思ったが、それdoesntのはhttp://www.pythontutor.com/

でプログラムを実行した後に動作するようですあなたがリストからアイテムを取得し、それをリストから削除しようとしているように見えます。この場合の.pop()方法があります:

card = Deck.pop() 

これはcardに割り当て、リストから削除し、リスト内の最後の項目を取得します。

card = Deck.pop(1) 

これはcardに割り当て、リストから削除し、リストから2番目(インデックス1)のアイテムを取得します。

0

洞察力に感謝しています私はこれを今どのように達成できると思っていますか? (私の大会もまた修正されました)

from random import randint 
def card_deck(): 
    #sets the card types and values 
    card_value = ['Ace','2','3','4','5','6','7','8','9','10','J','Q','K'] 
    card_type = ['Hearts','Spades','Clubs','Diamonds'] 
    deck = [] 
    #This iterates all 52 cards into a deck 
    for i in card_type: 
     for j in card_value: 
      deck.append(j + ' of ' + i) 
    return deck 

ここで私はこれをカードとremove_cardの機能に分けて、すべてをクリックしています!

def new_card(deck): 
    return deck[randint(0,len(deck)-1)] 

def remove_card(deck,card): 
    return deck.remove(card) 


new_deck = card_deck() 
card1 = new_card(new_deck) 
remove_card(new_deck,card1) 
card2 = new_card(new_deck) 
remove_card(new_deck,card2) 
関連する問題