如何用 python 3 乌龟绘制 "square" 点而不是 "round" 点?

How to draw "square" dots instead of "round" dots with python 3 turtle?

我有这个脚本:

import turtle
from math import sqrt
def isPrime(n):
    if n < 2: return False
    if n == 2: return True
    if n % 2 == 0: return False
    k = 3
    while k < sqrt(n):
        if n % k == 0:
            return False
        k += 2
    return True

def plot(k):
    numPrimes = 0
    turtle.pu()
    turtle.speed(0)
    turtle.pencolor("green")
    turtle.dot(5)
    n= 1
    dir = 1
    for i in range(80):
        for j in range(n):
            turtle.setx(turtle.xcor() + 7*dir)
            if isPrime(k):
                numPrimes += 1
                turtle.pencolor("red")
            else:
                turtle.pencolor("black")
            turtle.dot(5)
            k += 1
        for j in range(n):
            turtle.sety(turtle.ycor() + 7*dir)
            if isPrime(k):
                turtle.pencolor("red")
                numPrimes += 1
            else:
                turtle.pencolor("black")
            turtle.dot(5)
            k += 1
        n += 1
        dir = -dir
    print(k-1, numPrimes)
    turtle.hideturtle()

plot(1)

它将在窗格上绘制圆点,但我想绘制相互接触的“方形”点(邮票?),因此点之间没有白色 space,并且点本身是不是圆的,是方的。

基本上它应该看起来像一个巨大的棋盘,而不是一个“带点的方格”

这是它现在生产的

我要这个 (不要介意最后一张素数和非素数屏幕截图中的不准确性,这只是为了形象化我所说的“没有白色的方点 space”

的意思

我将如何实现这一目标? turtle 中似乎没有 dot() 生成方形图章而不是圆形点。

我搜索了 turtle 文档,但没有找到任何可以使点平方的东西。 但是,有一个方法叫做 .stamp(),它将海龟形状复制到当前海龟位置的 canvas 上。

所以,我给你的建议是:

  1. 通过 turtle.shape("square");
  2. 将乌龟做成方形
  3. 使用 turtle.turtlesize()stretch_wid=stretch_len= 参数调整大小,直到您满意为止;
  4. 使用turtle.stamp()代替turtle.dot()

在你的情况下,我还添加了一个海龟大小常量,将 .pencolor() 更改为 .color()

此处测试代码:

import turtle
from math import sqrt

SIZE_OF_TURTLE_COEFFICIENT = 0.255
def isPrime(n):
    if n < 2: return False
    if n == 2: return True
    if n % 2 == 0: return False
    k = 3
    while k < sqrt(n):
        if n % k == 0:
            return False
        k += 2
    return True

def plot(k):
    numPrimes = 0
    turtle.pu()
    turtle.speed(0)
    turtle.color("green")
    turtle.shape('square')          # <-- added code starts here
    turtle.turtlesize(stretch_wid=SIZE_OF_TURTLE_COEFFICIENT, stretch_len=SIZE_OF_TURTLE_COEFFICIENT)
    turtle.stamp()
    n= 1
    dir = 1
    for i in range(80):
        for j in range(n):
            turtle.setx(turtle.xcor() + 7*dir)
            if isPrime(k):
                numPrimes += 1
                turtle.color("red")
            else:
                turtle.color("black")
            turtle.stamp()
            k += 1
        for j in range(n):
            turtle.sety(turtle.ycor() + 7*dir)
            if isPrime(k):
                turtle.color("red")
                numPrimes += 1
            else:
                turtle.color("black")
            turtle.stamp()
            k += 1
        n += 1
        dir = -dir
    print(k-1, numPrimes)
    turtle.hideturtle()

plot(1)