如何让for循环在变量名的末尾添加数字

时间:2020-10-23 07:29:07

标签: python python-3.x

因此,基本上我正在尝试使用Python构建计算器。我知道这可能不是最佳选择,但是我喜欢Python,并且想挑战。我目前正在尝试找出一种使“无限”数量的数字和运算符成为可能的方法,因此,我想知道是否有可能例如在变量n之后添加一个数字,使{{1 }},n1n2以及运算符n3之后的数字使opop1op2

如果有更好的方法可以做到这一点,那就太好了,因为在使用Python时我还是比较陌生。

2 个答案:

答案 0 :(得分:1)

如果有更好的方法可以做到这一点,那是很棒的,因为在使用python时我还相对较新。

是的。清单。或字典,但可能列出。可能是universal_print(双端队列),具体取决于您要使用它的方式(从常规deque的开头添加或删除项目效率很低,尤其是列表的大小增加)。想要动态创建变量名是一个巨大的危险信号。

我目前正试图找出一个“无限”的量

查找迭代器和生成器以及itertools。这些是懒惰地构建和组成无限序列的工具。

尽管我不太清楚为什么要使用计算器,除非您想生成数据流和操作流以进行测试?在这种情况下,我建议您在hypothesis游荡。

答案 1 :(得分:1)

您要的内容(注意:不是您需要的内容)

所以我想知道是否有可能在变量n之后添加一个数字,使其分别为n1,n2,n3,并在运算符op之后添加一个数字,从而使op1,op2,op3等。

通过将globals()返回的全局变量插入字典,您实际上可以创建全局变量,从而允许对名称使用字符串处理:

globals_dict = globals()

for i in range(50):
    # As an example, let's put i squared into variable n{i},
    # i.e., 0 squared (= 0) into n0, 1 squared (= 1)  into n1,
    # 2 squared (= 4) into n2, etc.
    globals_dict[f"n{i}"] = i**2

assert n11 == 121  # Check that n11 is actually 11 squared, i.e., 121.

在Python的某些实现中,这甚至适用于locals()返回的局部变量字典以创建局部变量,但与globals()相比,行为是未指定的,因此不应依赖。

要使用这些变量而不用硬编码它们的名称,就必须再次访问globals()globals_dict,这是完全不切实际的。

您实际需要的东西

有一种将多种值放入单个变量的pythonic方法(即Python中的惯用语):集合类型。该语言内置了最通用(因此也是最常用)的值。本身:

standard library module collections中提供了更多集合类型。

如果您不确定如何使用内置集合,请仔细阅读Python tutorial in the official Python documentation