使用for循环创建具有不同名称的变量

时间:2016-04-10 21:22:26

标签: python variables naming

我正在尝试使用for循环来创建5个(当前)变量。我想让这些变量命名为soldier + i,其中i是for循环中迭代的数字。

    first_names=['name1', 'name2', 'name3', 'name4', 'name5']
    last_names=['Lname1', 'Lname2', 'Lname3', 'Lname4', 'Lname5']
    nick_names=['1','2','3','4','5']
    soldier_HPs=[10,9,8,7,6]
    for i in range(5):
        soldier+i=[first_names[i-1],last_names[i-1],nick_names[i-1],soldierHPs[i-1]] 

正如你所看到的,我想通过命名士兵"士兵+(各自的数字)"来存储每个士兵。然后将其健康状况,第一个,最后一个和昵称存储为列表的一部分。我遇到的问题是它无法连接字符串和整数。问题是这应该是变量的名称。如果我只想让它成为一个设置变量的字符串,我可以使用:x =" soldier" + str(i)。但是,因为这是变量的名称,所以这不起作用。

2 个答案:

答案 0 :(得分:1)

欢迎使用Stackoverflow!我注意到你作为一名高中生的个人资料,所以我不会假设你有任何先前的知识。那么,让我们回答您的问题。

您正在使用Python中的list来存储有关士兵的信息。然后你想分别为每个士兵存储信息。现在,这不是多余的吗?

如果我想要第一个士兵的名字,我可以去first_name[0]。所有信息都可以通过有意义的变量名称(即first_names,last_names等)在当前范围内访问。如果你把它们放在一个列表中,你必须记住第一个索引是first_names,第二个是last_names等等。当你的程序/游戏代码变大时,这会增加另一层混乱。

但是,在某些情况下,为了迭代的目的,将字符信息分组确实更方便。在Python中有一个名为collections的模块,您可以在其中找到一个名为namedtuple的函数。这个函数是一个所谓的factory function,其唯一目的是为你声明和定义类。

说我想快速定义Soldier课程,这是

from collections import namedtuple

Soldier = namedtuple('Soldier', ['first_name', 'last_name', 'nick_name', 'HP'])
soldier_info = [ # this is list comprehension
    Soldier(first_names[idx], last_names[idx], nick_names[idx], soldier_hps[idx])
    for idx in range(len(first_names))
]

然后你可以做

firstname_second_soldier = soldier_info[1].first_name

namedtuple是不可变的,可以像tuple一样使用,但是使用命名字段。

答案 1 :(得分:0)

这对你来说可能有点过于先进,但我认为理解面向对象编程的概念并尽快介绍它们是很好的。一个可能的解决方案是创建一个士兵class,如下所示:

class Soldier(object):

    def __init__(self,first_name,last_name,nickname,hp):
        self.first_name = first_name
        self.last_name = last_name
        self.nickname = nickname
        self.hp = hp

    def __repr__(self):
        return str(self.nickname)


soldier_one = Soldier('name1','lname1','1',10)

print soldier_one ## 1
print soldier_one.first_name ## name1
print soldier_one.hp ## 10

soldier_two = Soldier('name2','lname2','2',9)

等等。如果您对这种方法有任何疑问,请告诉我 - 一开始它的直觉性稍差,但我真的希望我在Python开始时更认真地对待它。