[英]How can I draw a grid of squares?
My current code only draws 1 row of squares, however I want to draw a whole grid of squares?我当前的代码只绘制了 1 行正方形,但是我想绘制整个正方形网格? How do I do this?
我该怎么做?
from turtle import*
bob=Turtle()
def square():
x = 0
y=0
for i in range(4):
bob.forward(50)
bob.left(90)
bob.forward(50)
bob.left(90)
bob.forward(50)
bob.left(90)
bob.forward(50)
bob.left(90)
bob.goto(50+x,0)
x+=50
bob.goto(0,-50)
bob.right(90)
square()
square()
square()
input()
You have to play around to understand better the concept of functions - the idea is that you get a function that does one simple task, and do it well - and then write other functions to combine calls to that first one with other code, to do other tasks.您必须尝试更好地理解函数的概念——这个想法是你得到一个函数,它可以完成一个简单的任务,并且做得很好——然后编写其他函数来将第一个函数的调用与其他代码结合起来,做其他任务。
Your code looks like you picked the square example from somewhere, and them just tried to pump-up the square function to do everything at once: that makes for poor quality code, which is hard to understand, or even to write correctly.您的代码看起来就像您从某个地方选择了 square 示例,而他们只是尝试使用 square 函数来一次完成所有事情:这导致代码质量很差,难以理解,甚至难以正确编写。
So try the following:因此,请尝试以下操作:
import turtle
bob = turtle.Turtle()
def square(side):
for i in range(4):
bob.forward(side)
bob.left(90)
def row(n, side):
for i in range(n):
square(side)
bob.forward(side)
bob.penup()
bob.left(180)
bob.forward(n * side)
bob.left(180)
bob.pendown()
def row_of_rows(m, n, side):
for i in range(m):
row(n, side)
bob.penup()
bob.left(90)
bob.forward(side)
bob.right(90)
bob.pendown()
bob.penup()
bob.right(90)
bob.forward(m * side)
bob.left(90)
bob.pendown()
row_of_rows(4,5, 20)
import turtle
loadWindow = turtle.Screen()
turtle.speed(1)
turtle.colormode(255)
turtle.pensize(1)
STEP = 25
LENGTH = 1000
for i in range(0, LENGTH, STEP):
turtle.penup()
turtle.setpos(-LENGTH/2, LENGTH/2 - i)
turtle.pendown()
turtle.setpos(LENGTH/2, LENGTH/2 - i)
turtle.penup()
turtle.setpos(-LENGTH/2 + i, LENGTH/2)
turtle.pendown()
turtle.setpos(-LENGTH/2 + i, -LENGTH/2)
Thanks to @cdlane for suggesting integer division inside the range
function.感谢@cdlane 建议在
range
函数内进行整数除法。
import turtle
size = 50
for x in range(-300//size, 300//size):
for y in range(-300//size, 300//size):
turtle.up()
turtle.goto(x * size, y * size)
turtle.down()
for sides in range(4):
turtle.forward(size)
turtle.left(90)
turtle.update()
turtle.done()
I can see why some of the answers call hideturtle()
at the beginning of the code, instead of at the end, as well as tracer(0)
, as that is some of the most painful to watch drawing I've ever seen.我可以
hideturtle()
为什么一些答案在代码的开头而不是结尾调用hideturtle()
以及tracer(0)
,因为这是我见过的最痛苦的观看绘图。 I feel part of the fun of turtle graphics is watching the turtles, so I offer my solution:我觉得海龟图形的部分乐趣在于观察海龟,所以我提供了我的解决方案:
from turtle import Turtle, Screen
UNIT_SIZE, GRID_SIZE = 50, 200
def half_grid(turtle):
speed = turtle.speed()
for brick in range(GRID_SIZE // UNIT_SIZE):
direction = [turtle.right, turtle.left][brick % 2 == 1]
for i in range(0, GRID_SIZE, speed):
turtle.forward(speed)
yield(0)
direction(90)
for i in range(0, UNIT_SIZE, speed):
turtle.forward(speed)
yield(0)
direction(90)
for i in range(0, GRID_SIZE, speed):
turtle.forward(speed)
yield(0)
mickey = Turtle(shape='turtle')
mickey.speed(5)
mickey.up()
mickey.goto(-GRID_SIZE//2, -GRID_SIZE//2)
mickey.down()
mickey.left(90)
donnie = Turtle(shape='turtle')
donnie.speed(5)
donnie.up()
donnie.goto(GRID_SIZE//2, -GRID_SIZE//2)
donnie.down()
donnie.left(180)
generator1, generator2 = half_grid(mickey), half_grid(donnie)
while (next(generator1, 1) + next(generator2, 1) < 2):
pass
mickey.hideturtle()
donnie.hideturtle()
screen = Screen()
screen.exitonclick()
Admittedly, you have to choose UNIT_SIZE
, GRID_SIZE
, and turtle.speed()
carefully for this to work properly.诚然,您必须仔细选择
UNIT_SIZE
、 GRID_SIZE
和turtle.speed()
以使其正常工作。
Turtles at work:工作中的乌龟:
This is working :)这是有效的:)
import turtle
turtle.tracer(1) # Turns off screen updates
grid = turtle.Turtle()
STEP = 20
LENGTH = 200
for i in range(0, LENGTH+STEP, STEP):
grid.penup()
grid.setpos(-LENGTH/2, (LENGTH/2 - i)) # go to start hoz line possition
grid.pendown()
grid.setpos(LENGTH/2, (LENGTH/2 - i)) # draw horizontal line
grid.penup()
grid.setpos((-LENGTH/2 + i), LENGTH/2) # go to start vertical line possition
grid.pendown()
grid.setpos((-LENGTH / 2 + i), -LENGTH / 2)
turtle.update()
turtle.exitonclick()
If you want to display instantly, change this:如果要立即显示,请更改此:
turtle.tracer(1) # Turns off screen updates
to this:对此:
turtle.tracer(0) # Turns off screen updates
use two for loops to draw your grid使用两个 for 循环来绘制网格
for row in range(x, width_of_screen,width_of_grid_box):
for column in range(y,height_of_screen,height_of_grid_box):
square = pygame.draw.rect(surface, COLOR, (row, column, width_of_grid_box, height_of_grid_box),2)
square_pos.append(square)
import turtle as t
t.tracer(0, 0)
t.speed(0)
grid={
'left':-500,
'right':500,
'top':-500,
'bottom':500,
'interval':10
}
x_positions=range(grid['left'],grid['right'],grid['interval'])
y_positions=range(grid['top'],grid['bottom'],grid['interval'])
for x in x_positions:
t.penup()
t.setpos(x,grid['top'])
t.pendown()
t.setpos(x,grid['bottom'])
for y in y_positions:
t.penup()
t.setpos(grid['left'],y)
t.pendown()
t.setpos(grid['right'],y)
t.update()
import turtle
wn = turtle.Screen()
wn.title("title")
wn.bgcolor("white")
wn.setup(width=500, height=500)
grid = turtle.Turtle()
grid.speed(0)
grid.hideturtle()
grid.penup()
grid.goto(-240, 240)
grid.direction = "right"
grid.pendown()
grid.forward(480)
grid.right(90)
grid.forward(480)
grid.right(90)
grid.forward(480)
grid.right(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.left(180)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
sorry, it's really long对不起,真的很长
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.