2012-09-12 183 views
0

我試圖使用Python /龜來實現這樣的結果:繪製形狀使用龜

http://i.imgur.com/2eoAB.png

我畫的油漆不均勻的平方,但我的意思是他們是偶數。根據用戶輸入,正方形也可以是任何形狀(對於多邊形,例如5)。

這裏是我到目前爲止的代碼:

import turtle 
import time 
import random 

print ("This program draws shapes based on the number you enter in a uniform pattern.") 
num_str = input("Enter the side number of the shape you want to draw: ") 
if num_str.isdigit(): 
    squares = int(num_str) 

angle = 180 - 180*(squares-2)/squares 

turtle.color(random.random(),random.random(), random.random()) 
turtle.begin_fill() 

count = 0 
x = -80 
y = -80 
turtle.setpos(x,y) 
turtle.down() 

while count < 8: 
    x += 50 
    y += 50 
    turtle.goto(x,y) 
    for i in range(squares): 
     count += 1 
     turtle.forward(20) 
     turtle.left(angle) 
     turtle.forward(20)  
     print (turtle.pos()) 

turtle.end_fill() 

time.sleep(15) 
turtle.bye() 

這裏是我所得到的:

http://i.imgur.com/7hAje.png

我得到的錯誤是:我怎樣才能得到它打印出來8種形狀總,而不是隻有2,我雖然循環會使它重複8次,因爲計數+ = 1 < 8?

我認爲循環會改變x和y的位置,每次增加50,50,然後我會調整它以給出正確的座標來使我想要的形狀,但它甚至不會顯示全部8然而?

我已經花了一段時間重新配置代碼,但沒有永遠做試驗和錯誤,我想也許有些幫助會工作,謝謝。

我使用Python 3.2.3

回答

1

如果選擇四邊顯示的形狀,你只打算畫兩個形狀。這是因爲你正在增加你的循環計數器每側對於每個形狀

這不是做循環的好辦法,專櫃很少必要的,而當他們是 - 使用enumerate

你想嘗試這樣的事情。

numshapes = 8 
for x in range(numshapes): 
    x += 50 
    y += 50 
    turtle.goto(x,y) 
    for i in range(squares): 
     turtle.forward(20) 
     turtle.left(angle) 
     turtle.forward(20)  
     print (turtle.pos()) 
+0

謝謝,我想,和移動的turtle.up /降一點,我得到了8個平方的支柱,現在它只是一個在路上的定位平方的事情,我希望他們在上面右圖? – Goose

+0

是的,我想是的。你爲什麼在那個循環中兩次調用'turtle.forward()'?看起來你正在爲每一邊畫兩面。 – Aesthete

+0

按照我想要的方式定位這些方塊非常困難,烏龜窗口是否充當正常的座標圖?我將不得不制定一個算法/公式來定位這些方塊,因爲輸入差異x,y值變得單調乏味......而且我沒有足夠的經驗來解釋它爲什麼會出現在那裏兩次,但是從我所知道的當我運行該程序時,似乎並沒有畫兩次..? – Goose