2012-03-29 11 views
0

Ich habe 10 Würfel, die alle wie D1 programmiert sind.Wie setze ich den Wert innerhalb einer Liste in Python?

D1 = random.randint(1,12) 

Ich speichere sie dann alle in einer Liste wie folgt aus:

roller[DI,D2...] 

Eine Person wählt dann die Form (in einer while-Schleife) zu halten und, wenn er will die restlichen Würfel rollen er endet die Schleife. Das folgende Programm wird erfolgreich durchlaufen, die Würfel in der Liste ändern sich jedoch nicht. Was vermisse ich?

while wanted != "11": 
     print("The dice left in your roll:" , roller) 
     want = int(input("Select Di by using numbers 0-9.")) 
     di = roller[want] 
     del roller [want] 
     keep.append(di) 
     print("Dice that you have kept:" , keep) 
     wanted = input("\nType 11 to roll again. Type anything else to select more dice.\n") 
     wanted = "12" 
     D1 = random.randint(1,12) 
     [... more setting ...] 
     D10 = random.randint(1,12) 

Nachdem jedoch die Würfel D1 bis D10 Einstellung, wird die nächste Iteration meiner while-Schleife nicht eine Änderung des Wertes für die Rollenliste widerspiegelt. Warum ist das?

Antwort

3

Durch Ändern von D1 wird der Chip in der Liste nicht geändert. Sie müssen den Wert in der Liste selbst ändern.

>>> import random 
>>> dices = [random.randint(1,12) for i in range(0,10)] 
>>> dices 
[5, 2, 1, 6, 4, 8, 4, 10, 1, 10] 
>>> dices[1] = random.randint(1,12) 
>>> dices 
[5, 5, 1, 6, 4, 8, 4, 10, 1, 10] 

Hinweis oben, wie der zweite Würfel (Index 1) hat Wert in der dices Liste geändert.

Dh statt Dn = random.randint(1,12) wo n Ihre Würfel ist, möchten Sie dices[n] = random.randint(1,12)

Allgemeiner tun, Sie den Zuweisungsoperator in Python falsch verstehen.

>>> f = 123 

Setzt 'f' auf den Wert '123'.

Wenn Sie setzen f in einer Liste, wie folgt aus:

>>> my_list = [f, 1, 2, 3] 

Was Sie tun, ist zu sagen: „eine Liste erstellen, mit dem Namen‚my_list‘, die einen Verweis auf den Wert 123, 1, 2 und 3 darin.

Wenn Sie auf ‚f‘ neu zuzuweisen, die Referenz in der Liste nicht ändert.

>>> f = 456 
>>> my_list 
[123, 1, 2, 3] 

Was Sie sagen ist „jetzt f Punkte auf den Wert 456“. Diese ändert nicht die Bedeutung dessen, was war gib deine Liste an.

[beiseite]: Interessanterweise gilt das, obwohl dies für Python der Fall ist, nicht für alle Sprachen.

+0

Danke. Das hilft sehr. Konnte Zahlen aus Würfeln entfernen und trotzdem mit num = len (dices) erneut würfeln dices = [random.randint (1,12) für i im Bereich (0, num)] –

Verwandte Themen