类图(面向对象的编程)

时间:2019-12-22 13:39:38

标签: python loops class oop

我有这个程序。

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类中的任何内容,我不知道该怎么做。

2 个答案:

答案 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。这样,您不必每次想访问一条信息时都使用列表和索引。