2016-12-12 21 views
0

Hallo Ich mache ein Anfängerprojekt alleine, indem ich ein Blackjackspiel mache. Es läuft gut und ich kann sogar die Wahl zwischen 1 und 11 für Ace-Werte. Mein Problem ist, dass ich versuche, die Karten für mich selbst aus dem Deck zu entfernen und auch wenn ich einen Dealer hinzufüge.Listenwerte entfernen

Ich dachte, ich könnte die .remove() Funktion tun, es zu entfernen, aber das scheint nicht nach dem Laufen durch das Programm mit http://www.pythontutor.com/

Hier ist der Deck-Code I

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

Es sieht so aus, als ob die Karte erfolgreich aus 'Deck' entfernt wird, aber dann verlässt man die Funktion eine Zeile später und' Deck' existiert nicht mehr. Wenn Sie die Funktion erneut aufrufen, wird ein brandneues "Deck" erstellt, das absolut keine Verbindung zu dem Objekt hat, das diesen Namen einmal hatte. Wenn Sie möchten, dass "Deck" seinen Status über mehrere Funktionsaufrufe hinweg behält, können Sie es nicht jedes Mal neu in der Funktion erstellen. – Kevin

+0

Wie würden Sie vorschlagen, dass ich das tue? Habe einfach alles außerhalb einer Funktion, nehme ich dann an? –

+2

BTW: in Python ist die Konvention, Funktionen und Variablen mit snake_case und beginnend mit Kleinbuchstaben zu benennen. Verwenden Sie CamelCase für Klassennamen. – Pax0r

Antwort

2

bin mit zu arbeiten, Wenn Sie so aussehen, versuchen Sie, ein Objekt aus einer Liste zu entfernen und es aus der Liste zu entfernen. Es ist die .pop() Methode für diesen Fall:

card = Deck.pop() 

Dies wird das letzte Element in der Liste, weisen Sie ihn card und es aus der Liste zu entfernen.

card = Deck.pop(1) 

Dies wird die zweite (Index 1) Element aus der Liste, um es zu card zuweisen und sie aus der Liste entfernen.

0

Vielen Dank für die Einsicht, die ich herausgefunden habe, wie ich denke, dass ich dies jetzt erreichen kann und ich bin besser dafür! (auch meine Konvention behoben)

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 

Jetzt kann ich dies in Karte und remove_card Funktionen brechen, alles klickt!

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) 
Verwandte Themen