python for循环遍历变量列表

时间:2015-11-05 02:21:04

标签: python list for-loop turtle-graphics

我目前的python脚本中有很多海龟。它们被命名为t1,t2,t3,t4 ......我为每只乌龟做了很多设置,所以不要打字

t1.speed(0)
t2.speed(0)
t3.speed(0)
t4.speed(0)

t1.hideturtle()
t2.hideturtle()
t3.hideturtle()
t4.hideturtle()

似乎我应该能够将它们放入列表中,

x = ["t1", "t2", "t3", "t4"]

然后让for循环做这样的事情

for i in range(0,3):
    x.speed(0)
    x.hideturtle()

所以它会循环4次,每次通过时都会转到x中的下一个变量。这就是我至少要做的事情。我不是最好的for循环,我已经查看了所有相关的线程和指南,但我似乎无法弄明白。

另外,我应该使用

length = len(x)
for i in range(length):
    #stuff

所以我要做的就是在列表中添加一个新的乌龟,而不是必须在每个for循环中更改循环传递的数量?我希望这是有道理的,如果没有,请发表评论,我会尽我所能进行编辑。

6 个答案:

答案 0 :(得分:4)

将变量放在列表中,而不是字符串文字:

x = [t1, t2, t3, t4]

然后你可以这样做:

for i in range(len(x)):
  #stuff, like:
  x[i].hideturtle()

或简单地说:

for turtle in x:
    turtle.hideturtle()
    # etc.

您可能还想查看使用class

https://docs.python.org/2/tutorial/classes.html

class turtle():
    """ example of a class representing some sort of turtle """
    def __init__(self):
        # assign the default properties of the class
        self.speed = 0
        self.hidden = False
    def hideturtle(self):
        self.hidden = True
    def unhideturtle(self):
        self.hidden = False
    def setspeed(self, increment):
        # increase/decrease the current speed
        self.speed = 0 if self.speed += increment < 0 else self.speed += increment
    def stop(self):
        self.speed = 0


x = turtle()
y = turtle()

x.speed, y.speed = 10, 5
x.hideturtle()
print x.speed, y.speed, x.hidden, y.hidden

>>> 10, 5, True, False

要在列表中创建5只海龟,所有海龟都会实例化为您的基础&#34;设置&#34;是:

turtles = []
for i in range(5):
  turtles.append(turtle())

当然,不用说,一旦你定义了你的类turtle对象,你现在可以根据你可能需要的条件编写可以动态添加海龟的代码。

答案 1 :(得分:1)

听起来你正在寻找的是这样的东西:

x = [t1, t2, t3, t4]

for t in x:
    t.speed(0)
    t.hideturtle()

x是所有海龟的清单。执行for t in x时,它将遍历您的列表并将t指定为当前的乌龟,然后设置其速度并隐藏它。这样就不需要使用range(len(x))

答案 2 :(得分:0)

你可以这样做:

x = [t1, t2, t3, t4]
for item in x:
    item.speed(0)
    item.hideturtle()

x = [t1, t2, t3, t4]
for i in xrange(len(x)):
    x[i].speed(0)   # you should change the element in x, rather use x
    x[i].hideturtle()

答案 3 :(得分:0)

不是将海龟的字符串表示添加到列表中,而是添加海龟对象本身。

例如

turtles = [t1, t2, t3, t4] # t1, t2, t3, and t4 are turtle objects

然后遍历海龟并调用你的方法:

for turtle in turtles:
  turtle.speed(0)
  turtle.hideturtle() 

答案 4 :(得分:0)

turtles = [t1, t2, t3, t4]

# explicitly
for t in turtles:
    t.speed(0)

# wrapped up a bit more
def turtle_do(fn):
    for t in turtles:
        fn(t)
turtle_do(lambda t: t.hideturtle())

答案 5 :(得分:0)

或者要简明扼要地探索lambdas的世界

turtles = [t1, t2, t3, t4]
map(lambda x: x.speed(0), turtles)
map(lambda x: x.hideTurtle(), turtles)