螺旋横穿Python龟

2024-05-11 12:01:04 发布

您现在位置:Python中文网/ 问答频道 /正文

过去几天我一直在努力解决这个问题。它确实有效,但不是我想要的方式。问题是它从左上角(图1)开始螺旋,而不是从右下角(图2),这正是我想要的。我是一名初学者,我不知道turtle的许多方法或函数,因此请用您的代码回答我的问题,以便更好地理解:

import turtle
tur=turtle.Turtle()
tur.penup()
tur.setpos(-250,250)
dot_distance=15
def spiral(r,c):
  #r=row,#c=col
  ri=0;ci=0
  #ri=row_index,ci=col_index
  while(ri<r and ci<c):
    
     for i in range(c-1,ci-1,-1):
        tur.dot()
        tur.forward(dot_distance)
        
     r-=1
     tur.right(90)
    
     for i in range(r-1,ri-1,-1):
        tur.dot()
        tur.forward(dot_distance)
        
     ci+=1
     tur.right(90)
    
     for i in range(ci,c):
        tur.dot()
        tur.forward(dot_distance)
        
     ri+=1
     tur.right(90)
    
     for i in range(ri,r):
        tur.dot()
        tur.forward(dot_distance)
        
     c-=1
     tur.right(90)
   
spiral(20,20)

实际输出是第一张图片,但我希望它像第二张图片一样,从右下角而不是左上角开始螺旋:

][1]][1]1

:


Tags: inrightciforrangecoldotrow
3条回答

仅仅确定起始方向是不够的,我们还需要确定起始位置。在我们进行这项工作时,请完善您的代码:

from turtle import Screen, Turtle

DOT_DISTANCE = 15

def spiral(row, col):

    while col > 0 < row:

        for _ in range(col):
            turtle.forward(DOT_DISTANCE)
            turtle.dot()

        row -= 1
        turtle.right(90)

        for _ in range(row):
            turtle.forward(DOT_DISTANCE)
            turtle.dot()

        col -= 1
        turtle.right(90)

screen = Screen()

turtle = Turtle()
turtle.speed('fastest')  # because I have no patience
turtle.penup()
turtle.setpos(150, -150)
turtle.setheading(180)

spiral(20, 20)

turtle.hideturtle()
screen.exitonclick()

您只是在tur.setpos()之后缺少了^{}

从文档中:

将海龟的方向设置为_角度:以度为单位的一些常见角度

0: East
90: North
180: West
270: South

此代码将使一只乌龟在屏幕上盘旋,留下一个点迹,生成的图像将完全位于屏幕中央:

from turtle import Turtle

tur = Turtle()
tur.setheading(180)
tur.penup()
dot_distance = 10

def spiral(r,c):
    tur.setpos(c*dot_distance/2, -r*dot_distance/2)
    r -= 1
    while r+1 and c:
        for _ in range(c):
            tur.forward(dot_distance)
            tur.dot()
        c -= 1
        tur.right(90)
        for _ in range(r):
            tur.forward(dot_distance)
            tur.dot()
        r -= 1
        tur.right(90)
        
spiral(20,20)

输出:

enter image description here

您可以看到,在绘制每一行之后,我将变量(rc)减1,
所以这个while循环:while r+1 and c:告诉python,尽管每个变量仍然有点剩余,但是,
继续绘制行

相关问题 更多 >