Python 通过for循环分配变量

Python 通过for循环分配变量,python,python-3.x,variables,for-loop,automation,Python,Python 3.x,Variables,For Loop,Automation,我试图使用for循环为变量赋值——在本例中,变量都称为:'die1','die2','die3',等等 import random for i in range(5): die[i] = random.randint(1,6) 我想要达到的是,最终5个变量被分配了一个随机数。我尝试了几种不同的方法,但结果要么是“die”变量未赋值,要么是我无法使用“I”或另一个我计算的变量。假设目标是填充名为die的列表,那么您可以定义它并在每次迭代时附加整数: import random die

我试图使用for循环为变量赋值——在本例中,变量都称为:'die1','die2','die3',等等

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

我想要达到的是,最终5个变量被分配了一个随机数。我尝试了几种不同的方法,但结果要么是“die”变量未赋值,要么是我无法使用“I”或另一个我计算的变量。

假设目标是填充名为
die
的列表,那么您可以定义它并在每次迭代时附加整数:

import random

die = []
for _ in range(5):
    die.append(random.randint(1, 6))
如果您想要定义不同的变量,可以使用以下方法动态定义它们:

定义局部变量的行不是强制性的,尽管在IDE中使用它会更容易


如果你指的是第一部分,或是变量较少的第二部分,我认为Schwobasegl的解决方案更优雅。

对于你的解释器,
die1
die2
等都是不相关的实体。如果它们应该按照您的情况分组,请考虑<代码>列表 >:

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

但是,如果左侧的变量数量与右侧的
列表的长度不匹配,则会产生错误。出于灵活性原因,我建议使用列表。

我建议创建一个固定大小的列表,您可以分配给它,这样它就不会在每次调用
append
时都增长

import random

die = [0] * 5

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

现在您可以调用
roll
并更新模具列表。

如果变量数量很大,则可能无法在开始时提及所有变量名称。相反,它们可以在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']

有没有可能不使用列表,只将它们存储为单独的变量?我后面有一个类似这样的列表:
dice=[die1,die2,die3,die4,die5]
,后面的函数被这样调用:
dice[I]
,其中“I”通过for循环控制。这是一个优雅的解决方案。@Tym您可以按照这里的说明创建
dice
列表。如果你把自变量塞进一个列表中,那么你就没有必要先创建自变量了。谢谢你的更新:)!我使用它们的原因只是因为我对列表不是很有信心。。。可怜的借口,我知道…@Tym:你应该通过练习使用列表来获得自信!:)编写大量使用列表的小程序,直到你对它们的行为感到满意为止。列表非常重要,尤其是在Python中,它有几个处理列表的强大功能。当代码有一组编号的变量时,比如die1、die2、die3、die4、die5,它几乎总是应该使用列表或元组(或者可能是dict)。使用一堆编号的变量会使代码变得比需要的更大、更混乱,从而使开发和维护变得更困难。为什么列表的增长不好?不必要地用零填充内存不是更糟糕吗?@zondo我想他想要一个包含5个数字的列表。如果使用append,则每次点名都会将5个新号码追加到列表中,从而使列表不断增长。五个号码(最初为零)的列表在每次点名时都会更新为新值。因此,没有内存填充,每次都不会创建新列表,也不会创建新列表。如果您不喜欢列表不断增长的想法,请使用列表理解:
die=[random.randint(1,6)for uu in range(5)]
@ThomasChristensen实际上,
append
不会创建新列表,至少不是每次;)。追加是O(1):@zondo list comprehensions每次评估时都会创建一个新列表,对吗?感谢您的回复!请允许我问一下,为什么在第一个循环变量中使用“u”,而在第二个循环变量中使用“i”?还有-在第二部分中包含vars()的重要性是什么?在第一个循环中,没有使用
i
-python中的一个常见惯例是使用
\uu
命名这类变量。
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']