我有这个程序。
class Rocket():
def __init__(self, name)
self.name=name
self.height=0
def moveUp(self)
self.height+=1
myRockets=["One", "Two", "Three", "Four", "Five" ]
fleetOfRockets=[]
for rocket in myRockets:
fleetOfRockets.append(Rocket(rocket))
for rocket in fleetOfRockets:
print(rocket.name, rocket.height)
其输出如下:
One 0
Two 0
Three 0
Four 0
Five 0
在这里我想做的是让每个火箭向上移动10个。 这是我想要的输出。
One 10
Two 20
Three 30
Four 40
Five 50
不更改Rocket类中的任何内容,我不知道该怎么做。
答案 0 :(得分:0)
我假设只允许您在类声明之外更改代码。
根据想要实现的目标,有无数种获取输出的方法。
您可以枚举第一个循环中的火箭并将其直接分配给高度:
myRockets=["One", "Two", "Three", "Four", "Five" ]
fleetOfRockets=[]
for i, rocket in enumerate(myRockets, 1):
new_rocket = Rocket(rocket)
new_rocket.height = i * 10
fleetOfRockets.append(new_rocket)
您还可以创建一个内部循环来调用moveUp
,而不是直接设置height
。
答案 1 :(得分:0)
如果您不想更改Rocket类中的任何内容,则可以在myRockets列表中添加最终高度。所以:
myRockets = [["One", 10], ["Two", 20], ["Three", 30], ["Four", 40], ["Five", 50]]
并且当您想要追加到FleetOfRockets时,可以使用索引访问每个值。但是,这意味着FleetOfRockets列表存储了一堆列表,而不是每个单独的火箭(因此您必须在每次访问时都键入该列表并编制索引):
for rocket in myRockets:
fleetOfRockets.append([Rocket(rocket[0]), rocket[1]])
然后,您可以使用for循环并访问火箭的最终高度以多次循环。例如:
for rocket in fleetOfRockets:
for i in range(0, rocket[1]):
rocket[0].moveUp()
但是,在Rocket类中添加final_height可能更简单(这样一来,信息可以更容易地存储在一个类中),然后 then 替换for循环中的最终高度与rocket.final_height
。这样,您不必每次想访问一条信息时都使用列表和索引。