1

基本上想要制作这两种模式,都取决于n(1 的行数和 2 的三角形数),这两种情况都是 5。请参阅下面的图片以获取所需的输出。

这是我想出的第一个。在内循环中的每次迭代中向下绘制点,向左添加一个点。理想情况下,我希望它使点从左到右,然后在内部循环中的每次迭代添加一个点。

def drawTriangularSeries(myTurtle, n):
    sideLength = 10
    x = 0
    y= 200

    myTurtle.penup()
    myTurtle.goto(x, y)
    for row in range(n+1):
        for col in range(row):
            myTurtle.dot()
            myTurtle.back(sideLength)
        myTurtle.back(sideLength)
        y -= sideLength
        myTurtle.goto(x, y)

这是我为第二个所做的。每当它要绘制下一个三角形时,它都会将其绘制在前一个三角形的下方。

def drawTriangle(myTurtle, dotsPerSide, startX, startY):
    sideLength = 10
    x = startX
    y = startY

    myTurtle.penup()
    myTurtle.goto(x, y)
    for i in range(dotsPerSide+1):
        x += sideLength * i
        y += sideLength * i
        myTurtle.goto(x, y)
        for j in range(i + 1):
            for k in range(j):
                myTurtle.dot()
                myTurtle.back(sideLength)
            myTurtle.back(sideLength)
            y -= sideLength
            myTurtle.goto(x, y)

如何重写循环以使其生成图片?这是当前输出: 当前输出 这是它应该的样子,其中问题一是制作最后一个三角形,问题二是制作整个系列 正确输出

4

3 回答 3

1

尝试递归函数。就像是:

import turtle

def draw_triangle(size, col=1):
    for shift_y in range(0, col):
        my_turtle.goto(my_turtle.xcor(), shift_y * step_size)
        my_turtle.dot()
    my_turtle.forward(step_size)
    if col < size:
        draw_triangle(size, col + 1)


my_turtle = turtle.Turtle()
my_turtle.penup()
step_size = 10
for triangle_size in range(1, 8):
    draw_triangle(triangle_size)
    my_turtle.forward(step_size)
于 2019-09-27T21:18:33.370 回答
0

我解决了。万一以后有人遇到这个问题,这里是解决方案:

#Function that draws a triangle with n dots as base
def drawTriangularSeries(myTurtle, n):
    sideLength = 10
    x = 0 - sideLength
    y= 200

    myTurtle.penup()
    myTurtle.goto(x, y)
    for i in range(n+1):
        y = 200
        myTurtle.goto(x, y)
        for j in range(i):
            myTurtle.goto(x, y)
            myTurtle.dot()
            y += sideLength
        myTurtle.forward(sideLength)
        x += sideLength
# Function that draws a series of triangles with dPS as base #
def drawTriangle(myTurtle, dotsPerSide, startX, startY):
    sideLength = 10
    x = startX - sideLength
    y = startY

    myTurtle.penup()
    myTurtle.goto(x, y)
    for i in range(dotsPerSide):
        for j in range(i + 2):
            y = startY
            myTurtle.goto(x, y)
            for k in range(j):
                myTurtle.goto(x, y)
                myTurtle.dot()
                y += sideLength
            myTurtle.forward(sideLength)
            x += sideLength
    myTurtle.hideturtle()
于 2019-09-27T20:35:33.370 回答
0

我喜欢@DenZakh 的递归解决方案(+1),但它使用递归来绘制三角形的行,并使用迭代来绘制不同大小的三角形。我描绘了一个解决方案,它使用嵌套的迭代循环来绘制三角形,但使用递归来绘制序列中所有越来越大的三角形:

from turtle import Screen, Turtle

STEP_SIZE = 10

def drawTriangles(turtle, dots, steps=1):
    x, y = turtle.position()

    for step in range(steps):
        turtle.goto(x, y + step * STEP_SIZE)
        turtle.dot()

        for _ in range(steps - step - 1):
            turtle.backward(STEP_SIZE)
            turtle.dot()

    if steps < dots:
        turtle.goto(x + STEP_SIZE * (steps + 2), y)
        drawTriangles(turtle, dots, steps + 1)

screen = Screen()

yertle = Turtle()
yertle.hideturtle()
yertle.penup()

drawTriangles(yertle, 6)

screen.exitonclick()

在此处输入图像描述

于 2019-10-01T05:25:09.583 回答