2012-03-29 18 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を変更しても、リストのダイは変更されません。リスト自体の値を変更する必要があります。注意第二ダイス(指標1)dicesリスト内の値を変更したか上記

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

。 nはあなたのサイコロで

すなわち、代わりのDn = random.randint(1,12)は、あなたがpythonで代入演算子を誤解、より一般的にdices[n] = random.randint(1,12)

をしたいです。

>>> f = 123 

値 '123'を指すように 'f'を設定します。

あなたはこのように、リスト内のFを置く場合:

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

をあなたがやっていることは言っている:「リストを作成し、値123、1への参照を持つ 『my_listという』という名前の、2これで3。

あなたが「F」に再割り当てする場合は、リスト内の参照は変更されません。

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

何を言っていることは「値456になりましFポイント」である。この何の意味を変えていないあなたのリストに入れてください。

[脇に]:興味深いことに、これはPythonの場合ですが、これはすべての言語で当てはまるわけではありません。

+0

ありがとうございました。それは大いに役立ちます。数字をダイスから削除して、num = len(dices)を使ってまだリロールすることができました dices = [random.randint(1,12)for i(範囲、(0、num)]) –

関連する問題