You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从文本文件逐行读取绘图点以用Python Turtle绘制多边形

使用Python Turtle绘制文件中的多个独立多边形

你的核心问题是没有按行区分不同多边形的顶点数据,现有代码把所有行的内容混在一起了,没法单独处理每个多边形。下面一步步帮你修正并实现绘图功能:

第一步:修正数据读取逻辑

首先要逐行读取文件内容,每行对应一个多边形的顶点,这样就能把每个多边形的坐标单独存起来。

优化后的读取代码

import turtle
import os

# 用os.path.join拼接路径,自动适配不同系统的路径分隔符
file_path = os.path.join(os.path.dirname(__file__), 'plotpoints.txt')

# 存储所有多边形的顶点列表,每个元素对应一个多边形的坐标对集合
polygons = []

with open(file_path, "r") as plotme:
    # 逐行遍历文件内容
    for line in plotme:
        # 去掉行尾换行符,按逗号分割成字符串坐标列表
        coords_str = line.strip().split(",")
        # 将字符串转成整数,再按(x,y)格式分组
        coords = []
        for i in range(0, len(coords_str), 2):
            x = int(coords_str[i])
            y = int(coords_str[i+1])
            coords.append((x, y))
        # 把当前多边形的坐标列表加入总集合
        polygons.append(coords)

代码关键点解释

  • os.path.join:比直接拼接字符串更安全,不会因为Windows/Linux路径分隔符不同出错
  • line.strip():清除每行末尾的换行符,避免分割出空字符串干扰后续处理
  • 步长为2的循环:把相邻两个数值组成(x,y)坐标对,让每个多边形的坐标变成[(-30,9), (108,5), ...]的格式,方便绘图调用

第二步:用Turtle绘制所有多边形

现在我们有了每个多边形的独立坐标列表,就可以循环遍历完成绘图:

# 创建绘图笔对象
pen = turtle.Turtle()
pen.speed(0)  # 设置最快绘图速度

# 遍历每个多边形
for poly in polygons:
    pen.penup()
    # 抬笔移动到多边形的第一个顶点
    pen.goto(poly[0])
    pen.pendown()
    # 依次连接后续所有顶点
    for (x, y) in poly[1:]:
        pen.goto(x, y)
    pen.penup()

# 保持绘图窗口显示,直到手动关闭
turtle.done()

绘图逻辑说明

  • pen.penup()/pen.pendown():抬笔移动到起点,避免绘制不同多边形之间的多余线条
  • 你的示例数据中每行最后一个坐标和第一个坐标相同,所以绘制到最后一个点时会自动闭合多边形

完整可运行代码

把两部分代码合并即可:

import turtle
import os

file_path = os.path.join(os.path.dirname(__file__), 'plotpoints.txt')
polygons = []

with open(file_path, "r") as plotme:
    for line in plotme:
        coords_str = line.strip().split(",")
        coords = []
        for i in range(0, len(coords_str), 2):
            x = int(coords_str[i])
            y = int(coords_str[i+1])
            coords.append((x, y))
        polygons.append(coords)

pen = turtle.Turtle()
pen.speed(0)

for poly in polygons:
    pen.penup()
    pen.goto(poly[0])
    pen.pendown()
    for (x, y) in poly[1:]:
        pen.goto(x, y)
    pen.penup()

turtle.done()

额外实用提示

  • 如果坐标数值太大导致画布显示不全,可以用turtle.screensize(1000, 800)调整画布大小(参数为宽和高)
  • 想给不同多边形设置不同颜色,可以在循环里加入pen.color(random.choice(["red", "blue", "green"])),记得提前导入random模块

内容的提问来源于stack exchange,提问作者MatBab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:55:21