2016-04-09 11 views
-1

forループを使用して変数に値を代入しようとしています - この場合、変数はすべて 'die1'、 'die2'、 'die3'などと呼ばれます。forループによる変数の割り当て

import random 
for i in range(5): 
    die[i] = random.randint(1,6) 

私が達成しようとしているのは、乱数を割り当てられた5つの変数で終わることです。私はいくつかの方法を試しましたが、割り当てられていない変数、または私がカウントする別の変数を使うことはできません。目標を仮定し

答えて

2

あなたの通訳者にとっては、die1die2などは関連性のないエンティティです。彼らはあなたのケースのようにグループ化する必要がある場合は、listを考慮してください。

die = [random.randint(1,6) for _ in range(5)] 

あなたが本当に独立変数が必要な場合はdie[0]die[1]などにアクセスすることができますさて、あなたは使用することができます。

die1, die2, die3, die4, die5 = [random.randint(1,6) for _ in range(5)] 

これをただし、左側の変数の数が右側のlist/tupleの長さと一致しない場合は、エラーが発生します。柔軟性の理由から、私はリストを使用することをお勧めします。

+0

リストを使用せず、別の変数として保存する方法はありますか? 私はこのようになりますこと、後でリストを持っていた:i」で[i]は ' 'サイコロ: 'サイコロ= [die1、die2、die3、die4、die5]' 以降の機能は、などと呼ばれています'forループで制御されています – Tym

+0

これは洗練されたソリューションです。 – totoro

+0

@Tymここに示すように、あなたの 'dice'リストを作成することができます。最初に独立変数を作成し、それをリストに入れると正当な必要はありません。 – schwobaseggl

0

は、あなたがそれを定義し、各反復で整数を追加することができ、dieという名前のリストを埋めるためにある:

import random 

die = [] 
for _ in range(5): 
    die.append(random.randint(1, 6)) 

あなたが別の変数に意味場合は、動的varsを使用して定義することができます。

import random 

die1, die2, die3, die4, die5 = [0] * 5 
for i in range(5): 
    vars()['die{}'.format(i)] = random.randint(1, 6) 

ローカル変数を定義する行は必須ではありませんが、IDEで作業する方が簡単です。

最初の部分、または2番目の部分を意味する場合、私はschwobasegglの解決策がよりエレガントだと思います。

+0

ありがとうございました!ループ変数を探すために最初に '_'を使用した理由を尋ねるのを忘れないでください。また、2番目の部分にvars()を含めることの重要性は何ですか? – Tym

+0

最初のループでは、 'i'は使用されません - Pythonの一般的な規則は、この種の変数を' _'で指定することです。 – Elisha

0

appendを呼び出すたびにサイズが大きくならないように固定サイズのリストを作成することをお勧めします。

import random 

die = [0] * 5 

def roll(): 
    for i in range(5): 
     die[i] = random.randint(1, 6) 

rollと呼ぶことができます。ダイリストが更新されました。

+0

リストが成長するのはなぜ悪いですか?不必要にゼロでメモリをいっぱいにするのは悪くないですか? – zondo

+0

@ zondo私は彼が5つの数字のリストを望んでいると仮定しています。追加を使用する場合は、ロールへの各コールは5つの新しい番号をリストに追加し、それによってそれを育てます。 5つの数字(最初はゼロ)のリストは、ロールするたびに新しい値で更新されます。したがって、メモリがいっぱいでなく、毎回新しいリストが作成されることはありません。 – totoro

+0

とにかく新しいリストは作成されません。あなたが成長するリストの考え方が気に入らなければ、リストの理解を使用してください: 'die = [random.randint(1,6)for range(5)] ' – zondo

0

変数の数が多い場合は、最初にすべての変数名を記述することができない場合があります。代わりにforループの各反復で作成され、キーとして辞書に格納される一方で、それらに関連付けられた乱数はその値として辞書に格納することができます。

変数名の作成に文字列結合を使用できます(例:'die'+'1' = 'die1')。 'die1'を 'n'と呼ぶと、辞書に新しいキーをDict[n]=randint(1,6)として追加します。ここで、randint(1,6)は 'die1'に対応する値です。このようにして、これらの変数を数学演算に簡単に使用できます。

from random import randint 
Dict={} 
count=1 
for i in range(5): 
    n='die'+str(count) 
    DICT[n]=randint(1,6) 
    count=count+1 
    print DICT 
print DICT['die1'],DICT['die2'] 
print DICT['die1']+DICT['die2'] 
関連する問題