如何在python中设置列表中的值?

时间:2012-03-29 21:29:08

标签: python

我有10个骰子,其编程方式与D1相同。

D1 = random.randint(1,12)

然后我将它们全部存储在这样的列表中:

roller[DI,D2...]

然后一个人选择骰子保持(在一个循环中),当他想要掷剩下的骰子时,他结束了循环。下面的程序成功循环,但列表中的骰子没有变化。我错过了什么?

 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)

但是,在设置骰子D1到D10之后,我的while循环的下一次迭代不会反映滚轮列表的值的变化。这是为什么?

1 个答案:

答案 0 :(得分: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),而你的骰子是你的骰子,你想做dices[n] = random.randint(1,12)

更一般地说,你误解了python中的赋值运算符。

>>> f = 123

将'f'设置为指向值'123'。

如果你把f放在一个列表中,就像这样:

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

您正在做的是:“创建一个名为'my_list'的列表,其中包含对值123,1,2和3的引用。

当您重新分配给'f'时,列表中的引用不会更改。

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

你所说的是“现在f指向值456”。这并没有改变列表中放置内容的含义。

[旁白]:有趣的是,虽然这是Python的情况,但并非所有语言都适用。