我有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循环的下一次迭代不会反映滚轮列表的值的变化。这是为什么?
答案 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的情况,但并非所有语言都适用。