2016-04-09 80 views
-1

我試圖用一個for循環賦值給變量 - 在這種情況下,所有的變量稱爲:「die1」,「die2」,「die3」等通過指定變量循環

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

我想要實現的是以5個隨機數賦值的變量結束。我嘗試了一些不同的方法,但最終得到的是'die'變量未分配,或者我無法使用'i'或另一個我計數的變量。

回答

2

對於您的翻譯,die1,die2等是不相關的實體。如果他們應該爲你的情況進行分組,考慮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

是否有任何可能的方式不使用列表,並將它們存儲爲單獨的變量? 我有一個列表後,看起來像這樣: '骰子= [die1,die2,die3,die4,die5]' 後來函數調用這樣: '骰子[I]' 以「我'通過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中使用起來會更容易。

如果你的意思是第一部分,或第二部分的變量很少,我認爲schwobaseggl的解決方案更加優雅。

+0

感謝您的迴應!請介意我問你爲什麼在第一個中使用'_'來尋找循環變量,但是第二個是'我'?另外 - 在第二部分中包含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個新號碼到列表,從而增加它。五個數字(最初爲零)的列表用每次調用的新值更新。所以沒有內存填充,並且每次都不會創建新的列表。 – totoro

+0

無論如何都沒有創建新的列表。如果你不喜歡增長列表的想法,可以使用列表理解:'die = [random.randint(1,6)for _ in 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']