2012-09-12 185 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