2016-05-27 4 views
0

Dies ist für ein textbasiertes Kartenspiel.Setzen Sie eine Variable auf ein zufälliges Element von einem Array und nicht auf den Wert des Elements. --- python ---

Ich habe versucht, Python zu bekommen, um zufällig eine Variable aus einem Array auszuwählen und den Namen der Variablen in Fa zu speichern. Es speichert jedoch nur den Wert der Variablen Fa und nicht den Namen der Variablen.

Mein Code:

import random 

k='King' 
q='Queen' 
j='Jack' 
t='Ten' 
n='Nine' 
e='Eight' 
s='Seven' 
i='Six' 
f='Five' 
u='Four' 
h='Three' 
w='two' 
a='ace' 
c='of clubs' 
d='of diamonds' 
p='of spades' 
r='of hearts' 
#clubs 
A1=k+' '+c 
B1=q+' '+c 
C1=j+' '+c 
D1=t+' '+c 
E1=n+' '+c 
F1=e+' '+c 
G1=s+' '+c 
H1=i+' '+c 
I1=f+' '+c 
J1=u+' '+c 
K1=h+' '+c 
L1=w+' '+c 
M1=a+' '+c 
#diamonds 
A2=k+' '+d 
B2=q+' '+d 
C2=j+' '+d 
D2=t+' '+d 
E2=n+' '+d 
F2=e+' '+d 
G2=s+' '+d 
H2=i+' '+d 
I2=f+' '+d 
J2=u+' '+d 
K2=h+' '+d 
L2=w+' '+d 
M2=a+' '+d 
#spades 
A3=k+' '+p 
B3=q+' '+p 
C3=j+' '+p 
D3=t+' '+p 
E3=n+' '+p 
F3=e+' '+p 
G3=s+' '+p 
H3=i+' '+p 
I3=f+' '+p 
J3=u+' '+p 
K3=h+' '+p 
L3=w+' '+p 
M3=a+' '+p 
#hearts 
A=k+' '+r 
B=q+' '+r 
C=j+' '+r 
D=t+' '+r 
E=n+' '+r 
F=e+' '+r 
G=s+' '+r 
H=i+' '+r 
I=f+' '+r 
J=u+' '+r 
K=h+' '+r 
L=w+' '+r 
M=a+' '+r 

clubs=[A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1] 
diamonds=[A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2,M2] 
hearts=[A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3,M3] 
spades=[A,B,C,D,E,F,G,H,I,J,K,L,M] 

CardTotal=len(clubs) 

X='' 
Da='' 
Fa='' 
sep='\n And \n' 
hand='' 

Cardhand=7 

while(Cardhand != 0): 
    Cardhand=Cardhand-1 
    Da=random.choice(['1', '2', '3','4']) 
    if(Da=='1'): 
     Fa=random.choice(clubs) 
    elif(Da=='2'): 
     Fa=random.choice(hearts) 
    elif(Da=='3'): 
     Fa=random.choice(spades) 
    elif(Da=='4'): 
     Fa=random.choice(diamonds) 

    hand=hand+sep+Fa+sep 

    if(Fa in clubs): 
     clubs.pop(Fa) 
    elif(Fa in diamonds): 
     diamonds.pop(Fa) 
    elif(Fa in hearts): 
     hearts.pop(Fa) 
    elif(Fa in spades): 
     spades.pop(Fa) 

    Da='' 
    Fa='' 


cards=[clubs,diamonds,hearts,spades]  
+0

nur ersetzen z.B. 'random.choice (clubs)' durch 'i = random.choice (Bereich (len (clubs))'. Dann 'i' ist der Index und' clubs [i] 'ist der Wert. –

Antwort

0

Sie brauchen, dass Python nicht zu erkennen, „Variablennamen“ geben, wenn Sie eine Liste erstellen.

Dadurch:

spades=[A,B,C,D,E,F,G,H,I,J,K,L,M] 

die Liste nur der Werte besteht, dass diese Variablen zu spitz, Sie diese Liste nur um den Ausdruck sehen:

>>> spades 
['King of hearts', 'Queen of hearts', 'Jack of hearts', 'Ten of hearts', 'Nine of hearts', 'Eight of hearts', 'Seven of hearts', 'Six of hearts', 'Five of hearts', 'Four of hearts', 'Three of hearts', 'two of hearts', 'ace of hearts'] 

Wenn Sie stattdessen Holen Sie sich die Variablennamen, die Sie als Zeichenfolgen ohne die Werte speichern können:

spades=['A','B','C','D','E','F','G','H','I','J','K','L','M'] 

oder eine Liste von Tupel mit dem Namen und Wert:

spades=[('A',A),('B',B),('C',C),('D',D),('E',E),('F',F),('G',G),('H',H),('I',I),('J',J),('K',K),('L',L),('M',M)] 

dann kann der Wert und Namen mit extrahiert werden:

name, value = Fa 

Obwohl dies wirklich eine viel bessere Passform für eine Abbildung ist, statt einer Liste von Elementen, die durch Indizes abgerufen werden Sie jeden Wert mit einem Namen assoziieren:

spades = {'A':A, 'B':B, 'C':C, 'D':D, 'E':E, 'F':F, 'G':G, 'H':H, 'I':I, 'J':J, 'K':K, 'L':L, 'M':M} 

Obwohl diese random.choice von nicht mehr funktioniert, würden Sie dann ändern müssen, um es zu:

Fa=random.choice(tuple(spades)) 

Da random.choice setzt Indizes auf das mit einem Zufallselement zu wählen, so dass es eine Sequenz muss richtig arbeiten

Dann können Sie den Text der Karte erhalten, indem Sie den Rückgabewert von .pop Fang:

card_text = spades.pop(Fa) 

Sie mögen nicht die Idee, den Wert einer Variablen anstelle des Variablennamens zu übergeben, aber Sie werden feststellen, dass es Code erheblich vereinfachen kann, zum Beispiel anstatt zu tun:

Da=random.choice(['1', '2', '3','4']) 
if(Da=='1'): 
    Fa=random.choice(clubs) 
elif(Da=='2'): 
    Fa=random.choice(hearts) 
elif(Da=='3'): 
    Fa=random.choice(spades) 
elif(Da=='4'): 
    Fa=random.choice(diamonds) 

können Sie nur eine von der Liste auswählen/dicts für den Anzug, wie folgt aus:

Da=random.choice([clubs,diamonds,hearts,spades]) 
#Da is now the dict for the selected suit 
Fa = random.choice(tuple(Da)) 

Dann könnte die ganze while-Schleife das sein gerade:

spades = { 'A': A, 'B': B, 'C': C, 'D': D, 'E': E, 'F': F, 'G': G, 'H': H, 'I': I, 'J': J, 'K': K, 'L': L, 'M': M} 
clubs = {'A1':A1, 'B1':B1, 'C1':C1, 'D1':D1, 'E1':E1, 'F1':F1, 'G1':G1, 'H1':H1, 'I1':I1, 'J1':J1, 'K1':K1, 'L1':L1, 'M1':M1} 
diamonds = {'A2':A2, 'B2':B2, 'C2':C2, 'D2':D2, 'E2':E2, 'F2':F2, 'G2':G2, 'H2':H2, 'I2':I2, 'J2':J2, 'K2':K2, 'L2':L2, 'M2':M2} 
hearts = {'A3':A3, 'B3':B3, 'C3':C3, 'D3':D3, 'E3':E3, 'F3':F3, 'G3':G3, 'H3':H3, 'I3':I3, 'J3':J3, 'K3':K3, 'L3':L3, 'M3':M3} 
while(Cardhand != 0): 
    Cardhand=Cardhand-1 
    Da=random.choice([clubs,diamonds,hearts,spades]) 
    #Da is now the dict for the selected suit 
    Fa = random.choice(tuple(Da)) 
    #Fa is the key in that dict, so A or B2 or similar 
    card_text = Da.pop(Fa) 
    hand=hand+sep+card_text+sep 
+0

Danke, das hat sehr geholfen! : D –

0

Das Problem ist, mit Ihren Datenstrukturen: clubs=[A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1] werden nur die Werte Ihrer Variablen in Ihrem Arrays haben. Wenn Sie auch den Variablennamen haben möchten, würde ich vorschlagen, ihn in eine dict zu ändern und den key Variablennamen zu haben. Beispiel:

clubs = { 
    'A1': A1, 
    'B1': B1, 
    'C1': C1, 
    'D1': D1, 
    'E1': E1, 
    'F1': F1, 
    'G1': G1, 
    'H1': H1, 
    'I1': I1, 
    'J1': J1, 
    'K1': K1, 
    'L1': L1, 
    'M1': M1 
} 

Edit: (Wie Ishaq Khan vorgeschlagen, für python3 clubs.keys() gibt ein dict_keys Objekt, das nicht durchsuchbar ist) random.choice(clubs) würde dann ändern random.choice(list(clubs.keys())) zu sein.

0

Wenn ich klar verstanden habe, dann verwenden Sie Wörterbuch.

kopieren Code aus meinem Beispiel:

import random 

dic = {'k' : 'king', 'q' : 'queen'} 

dic_keys = list(dic.keys()) 

which = random.choice(dic_keys) 

selected_v = which 
selected_v_v = dic[selected_v] 

print(selected_v, selected_v_v) 
Verwandte Themen