2012-03-29 62 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

相关问题