2015-11-05 128 views
1

我在當前的python腳本中有許多海龜。它們被命名爲T1,T2,T3,T4 ......我有很多的設置來爲每個烏龜做的,所以不是類型通過變量列表循環循環的python

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 i in range(0,3): 
    x.speed(0) 
    x.hideturtle() 

因此,這將通過4次循環,在X上移動到下一個變量每次通過。這是我至少希望它做到的。我不是最好的循環,我已經看過所有相關的線程和指南,但我似乎無法弄清楚。

此外,我應該用

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

讓所有我需要做的就是添加一個新的龜到列表中,而不必改變循環的量通過在每個for循環?我希望這是有道理的,請評論,如果沒有,我會編輯盡我所能。

回答

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種海龜,所有實例化無論你的基地「設置」是:

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

當然,它應該不用說,一旦你有定義你的類turtle對象,你現在可以編寫代碼,根據你可能需要的任何條件動態添加海龜。

+1

的世界x中的turle比使用該範圍更加pythonic。 – gipsy

+1

是的@gipsy修改爲包括,我原來是從OP的語法工作。 –

1

這聽起來像你正在尋找的是這樣的:

x = [t1, t2, t3, t4] 

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

x是所有海龜的列表。當您執行for t in x時,它將循環顯示您的列表並將t指定爲當前烏龜,然後設置其速度並隱藏它。這樣就沒有必要使用range(len(x))

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() 
0

而不是增加你的龜到列表中的字符串表示加龜對象本身。

例如

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

然後遍歷海龜,並調用你的方法:

for turtle in turtles: 
    turtle.speed(0) 
    turtle.hideturtle() 
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()) 
0

還是要多簡潔,探索lambda表達式

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

簡短但帶有副作用的地圖很難看IMO – user2398029

+0

我還沒有遇到任何問題。你能讓我意識到嗎? user2398029。 –

+0

地圖來自函數式編程。 Map是一個將域D映射到範圍R的函數的操作。在這裏,您正在使用它來修改傳遞給map(海龜實例)的變量,這並不真正習慣。 – user2398029