我正在尝试使用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)。但是,因为这是变量的名称,所以这不起作用。
答案 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开始时更认真地对待它。