2017-02-18 1 views
-3

okay, so im Versuch, ein Blackjack-Spiel zu erstellen, wo das Bild einer Karte verwendet wird, habe ich alles funktioniert, aber ive entschieden zu Gehen Sie einen anderen Weg, um die Karten anzuzeigen, als es effizienter wäre. Ich habe eine Liste für alle Karten, die ich brauche, und möchte auf die Variablennamen innerhalb der Variablen verweisen, nicht auf die Werte der Variablen. Um zu klären, her einige meines Code:Python - Wie beziehen Sie sich auf die Elemente einer Liste (das sind Variablen) ohne Bezug auf ihren Wert

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 

aber das Problem dabei ist es zwischen dem Jack, der Königin oder dem König unterscheiden tut. ID verwenden möchte eine if-Anweisung, die entlang der Linien der folgenden gehen würde:

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

wieder, das Problem hier ist, dass der Computer sieht immer durch die Indexnamen und schaut, was die Variable ist gleich (in dieser Fall 10). ID möchte wissen, ob es eine Möglichkeit gibt, direkt auf den ausgewählten Variablennamen und nicht auf den Variablenwert zu verweisen. Ich habe bereits meine Karten Bilder funktioniert gut das ist nur ein Fall der Auswahl sie jetzt.

Jede Hilfe wird sehr geschätzt!

+0

Ich denke, dass Sie sich Wörterbuch in Python ansehen sollten. Dadurch können Sie verschiedene Indexwerte angeben und Sie können dann den entsprechenden Wert dafür erhalten. –

Antwort

0

Ich denke, dass Sie schließlich ein Wörterbuch hier verwenden möchten.

0

Erstens, achten Sie darauf, den Unterschied zwischen = und == in Ihrem Code zu beachten. Der ehemalige a = b wird a als gleich b gesetzt. Letzteres a == b ändert nicht a oder b, und wird True zurückgeben, wenn sie gleich sind, oder False, wenn sie nicht übereinstimmen.

Für die Unterscheidung von Bildkarten von der Zahl 10 und untereinander kann es hilfreich sein, die Karten als Zeichenfolgen zu speichern und ein Wörterbuch zu verwenden, um die Zahlen von jedem Kartenwert zu extrahieren.

# 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

Sie beziehe auf Ihre Variablen nach Wert und da Bube, Dame, König und 10 haben einen Wert von 10 natürlich sie das gleiche mit dem Python-Interpreter erscheinen.

Wenn Sie denselben Wert aber unterschiedliche Darstellung haben möchten, müssen Sie eine etwas komplexere Struktur verwenden. dict ist wahrscheinlich am einfachsten zu verstehen:

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!") 

Dies würde jedoch aussehen viel eleganter (und in bestimmten Fällen mehr performant), wenn Sie es gerade tun Weg OOP waren.

Verwandte Themen