我怎样画一个正方形网格?

时间:2016-10-21 23:08:02

标签: python turtle-graphics

我当前的代码只绘制了一行正方形,但是我想绘制一个完整的正方形网格?我该怎么做?

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

8 个答案:

答案 0 :(得分:2)

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)

答案 1 :(得分:0)

你必须四处游戏才能更好地理解功能的概念 - 我们的想法是你得到一个执行一个简单任务的函数,并且做得很好 - 然后编写其他函数来将第一个函数与其他代码的调用结合起来,以执行其他任务。

你的代码看起来就像你从某个地方选择了方形示例,他们只是试图抽出方形函数来同时执行所有操作:这会导致代码质量差,难以理解,甚至无法正确编写

请尝试以下方法:

  • 绘制正方形的函数,然后回到起点,朝向同一个方向
  • 通过重复" n"绘制方形行的函数。时间:(画一个正方形,向前走方形尺寸),然后回到起点。
  • 重复的另一个功能" m"时间:画一个正方形的行,朝向一个正方形的大小,然后回到原来面临的那一面。
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)

答案 2 :(得分:0)

我已经尝试了多种方法来发布代码本身但由于某种原因它只是将它添加到几行并混淆它所以我认为id保存为图片然后上传,给你一个理由写出来虽然我想并学习它:)

enter image description here

答案 3 :(得分:0)

我可以看到为什么有些答案在代码的开头而不是在结尾处调用hideturtle(),以及tracer(0),因为这是观看绘图最痛苦的一些我曾见过。我觉得乌龟图形的一部分是观看海龟的乐趣,所以我提供了我的解决方案:

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

不可否认,您必须谨慎选择UNIT_SIZEGRID_SIZEturtle.speed(),才能正常使用。

海龟在工作:

enter image description here

答案 4 :(得分:0)

使用两个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)

答案 5 :(得分:0)

这正在工作:)

(s/defn ->list :- [s/Any]
  "Coerce any sequential argument into a List."
  [arg :- [s/Any]]
  (apply list arg))

如果要立即显示,请更改以下内容:

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

对此:

turtle.tracer(1)  # Turns off screen updates

答案 6 :(得分:0)

Result Image

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

答案 7 :(得分:-2)

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)

对不起,真的很长

相关问题