【问题标题】:Concentric Squares in Python with TurtlePython 中的同心正方形与 Turtle
【发布时间】:2015-04-07 19:35:45
【问题描述】:

尝试用 Turtle 在 python 中制作同心正方形。这是我的尝试:

import turtle
def draw_square(t, size):
   for i in range(4):
       t.forward(size)
       t.left(90)
wn = turtle.Screen()
dan = turtle.Turtle()

sizevar = 1
for i in range(10):
   draw_square(dan,sizevar)
   sizevar += 20
   dan.penup()
   dan.backward(sizevar/ 2)
   dan.right(90)
   dan.forward(sizevar / 2)
   dan.left(90)
   dan.pendown()

我不确定为什么它们不是同心的,我的 dan.backward(sizevar/2)dan.forward(sizevar/2) 线条似乎将正方形向下和向左移动太多?

【问题讨论】:

  • 你用的是python2还是python3?
  • @Lalaland,使用 python3。
  • 你真的希望第一个正方形是 1 像素吗?
  • 是的,除非这会增加复杂性

标签: python turtle-graphics


【解决方案1】:

应该是这样的:

import turtle
def draw_square(t, size):
   for i in range(4):
       t.forward(size)
       t.left(90)
wn = turtle.Screen()
dan = turtle.Turtle()
sizevar = 1
for i in range(10):
   draw_square(dan, sizevar)
   sizevar += 20
   dan.penup()
   dan.backward(10)
   dan.right(90)
   dan.forward(10)
   dan.left(90)
   dan.pendown()

每个方格仅比前一个方格高出 10 个像素。

【讨论】:

  • 太棒了!出于某种原因,我没有理解 sizevar / 2 不会每次都移动相同的距离。
【解决方案2】:

同心正方形请求使用递归算法(与迭代相反)来完成:

import turtle

def draw_square(t, size):
    for i in range(4):
        t.forward(size)
        t.left(90)

def recursive_draw(t, x, y, size):
    if (size < 200):
        t.penup()
        t.goto(x, y)
        t.pendown()
        draw_square(t, size)
        x -= 10
        y = x
        size += 20
        recursive_draw(t, x, y, size)

wn = turtle.Screen()
dan = turtle.Turtle()
recursive_draw(dan, 0, 0, 1)

用这种方式推理代码似乎更容易:

基本情况:大小不得超过 200 接近策略:将尺寸增加 20

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    相关资源
    最近更新 更多