我该如何绘制一堆正方形?

1 投票
2 回答
8587 浏览
提问于 2025-04-17 07:16

我刚开始学Python,想为大学画一个图形,但觉得很难,所以我先想画一个正方形。

我有个问题:我怎么才能画出8行?(每行有8个正方形)我不能一直添加def start_point1():,这样做不太合适。

这里插入图片描述

#!/usr/bin/python

import turtle as t
import time

def start_point():
    t.penup()
    t.setpos(-200,-240)
    t.pendown()

def start_point1():
    t.penup()
    t.setpos(-200,-180)
    t.pendown()

def draw_turtle():
    for a in range(4):
        t.forward(60)
        t.left(90)

def draw_turtlerow():
    for a in range(8):
        draw_turtle()
        t.forward(60)



def main():
    start_point()
    draw_turtlerow()
    start_point1()
    draw_turtlerow()

2 个回答

0

考虑给 start_point 添加一些参数,而不是每次都创建新的函数版本。例如:

def start_point(x,y):
    t.penup()
    t.setpos(x,y)
    t.pendown()

这样一来,你就可以去掉 start_pos1() 这个函数,重复使用代码,这样做是很好的。

顺着这个思路,也可以给你的其他函数增加一些灵活性。比如,为什么不让 draw_turtlerow 接受一个数字,告诉它要在这一行画多少个方块呢?这样你就可以再写一个方法,接受你想要的行数——这个方法会多次调用 draw_turtlerowstart_pos 来画出整个网格。

我不确定这是否是你作业的正确方向,但我希望这能给你一些启发。

8

在这类问题中,你应该问自己,什么是“基本”的操作,重复这个操作就能得到完整的解决方案。你已经找到了基本的“原子”:画一个正方形的一条边:

t.forward(60)

接下来,什么是更高层次的“原子性”呢?其实,重复画四次边,你就能得到一个正方形(这点你自己也发现了)。

for a in range(4):
    t.forward(60)
    t.left(90)

按照这个思路,你可能会得出结论:如果你把上面的操作重复8次,就能得到一条线;而如果你把一条线重复8次,就能得到一个完整的棋盘。大概是这样的:

for col in range(8):
    for row in range(8):
        # draw a square here

现在,你已经写好了画正方形的函数,唯一的问题是你需要在不同的位置画每一个正方形。这里你需要关注的关键点是:你能想到一个方法,从colrow的值来计算这个位置吗?

如果你卡住了,我在这里提供了一个示例实现 这里我相信你不需要去查看它,但如果你需要的话,这里有个额外的任务:不要直接使用那段代码,而是把里面的循环改成调用一个单独的函数 draw_square(row, col)

编辑:为了获得额外的分数和成就感,完成练习后,注意到棋盘上的大部分线条是反复被重画的。只需稍微努力,你就能让你的程序效率翻倍。你能想到怎么做吗?

希望对你有帮助!

撰写回答