2012-03-29 63 views
0

我有10個骰子,它們的編程都與D1相同。如何在python中設置列表中的值?

D1 = random.randint(1,12) 

我再把它們存儲在像這樣的列表:

roller[DI,D2...] 

的人則選擇模具,以保持(在while循環),當他要滾動剩餘骰子他結束循環。下面的程序成功循環,但是列表中的骰子沒有變化。我錯過了什麼?

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) 

然而,通過設置D10骰子D1後,我while循環的下一次迭代不反映輥列表值的變化。爲什麼是這樣?

回答

3

更改D1不會更改列表中的骰子。你必須改變列表本身的值。

>>> 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] 

注意如何第二骰子上述(索引1)在dices列表已改變值。

即,而不是Dn = random.randint(1,12)其中n是你的骰子,你想要做dices[n] = random.randint(1,12)

更一般地,你誤解賦值運算符的蟒蛇。

>>> f = 123 

將'f'設置爲指向值'123'。

如果你把F IN列表,像這樣:

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

你在做什麼時說:「創建一個列表,名爲‘my_list’有可能值123,1,2參考3在裏面。

當您重新分配給「F」,在列表中引用不你說什麼是「現在F積分的價值456」的轉變。

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

。這不會改變原來的意義放在你的列表中。

[aside]:有趣的是,雖然這是Python的情況,但並非所有語言都是如此。

+0

謝謝。這有很大幫助。能夠從骰子中刪除數字並仍然使用num = len(骰子)重新擲骰子 dices = [random.randint(1,12)for i in range(0,num)] – 2012-03-29 21:47:17

相關問題