在乌龟屏幕上画方格旗

2024-09-28 01:28:06 发布

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

问题:实现以下伪代码以在屏幕上绘制方格标志。

1.  Ask the user for the size of the checkered flag (n).
2.  Draw an n x n grid to the screen.
3.  For i = 0,2,4,...,62:
4.     row = i // n
5.     offset = row % 2
6.     col = (i % n) + offset

请复制并粘贴链接参见output

我实现了伪代码,但我需要一些帮助。我可以画出n*n网格;而且,我一直得到这个错误:NameError: name 'row' is not defined

我的计划:

^{pr2}$

Tags: ofthe代码forsize屏幕标志绘制
2条回答

您在问题中发布的代码没有绘制正方形,因为您在pen.begin_fill()之后没有任何海龟操作。在

可以按如下方式绘制填充正方形:

  turtle.begin_fill()
  for i in range(4):
    turtle.forward(1)
    turtle.right(90)
  turtle.end_fill()

伪代码实际上有个错误。偏移量计算offset = row % 2仅当n(行数)为偶数时才有效。当n为奇数时,伪代码无法计算方格位置。在

要使代码适用于n的奇偶值,可以按如下方式计算偏移量:

^{pr2}$

我已经在下面的代码中实现了这些更改。我还修改了程序的结构,在绘图函数之外定义了海龟,并将其作为参数传入。这使得我们只需设置海龟的速度和可见性设置一次,而不必在每个绘图函数中都这样做。在

from turtle import*

# Ask the user for the size of the checkered flag (n).
def getSize():
  size = eval(input('Please enter the size of the checkered flag: '))
  return size

# Draw an n x n grid to the screen.
def drawGrid(turtle, n):
  for i in range(0, n+1):
    turtle.up()
    turtle.goto(0, i)
    turtle.down()
    turtle.forward(n)
  turtle.left(90)
  for i in range(0, n+1):
    turtle.up()
    turtle.goto(i, 0)
    turtle.down()
    turtle.forward(n)

# Fill the square in the given row and column.
def fillSquare(turtle, row, col):
  turtle.up()
  turtle.goto(col, row)
  turtle.begin_fill()
  for i in range(4):
    turtle.forward(1)
    turtle.right(90)
  turtle.end_fill()

def main():
  # Get the user's input.
  n = getSize()

  # Set up the drawing coordinates.
  screen = Screen()
  screen.setworldcoordinates(-1, -1, 10, 10)

  # Make a turtle object for use in drawing. Maximize its speed.
  turtle = Turtle()        
  turtle.speed('fastest')
  turtle.hideturtle()      

  # Draw the checkered flag.
  drawGrid(turtle, n)
  for i in range(0, n*n, 2):
    row = i // n
    offset = ~(n % 2) & (row % 2)
    col = i % n + offset
    fillSquare(turtle, row, col)

  print('Hit Enter to quit.')
  input()

main()

在这种情况下,我相信冲压比Python turtle中的绘图更简单:

from turtle import Turtle, Screen

CURSOR_SIZE = 20

def getSize():
    """ Ask user for the size of the checkered flag. """

    return int(input('Please enter the size of the checkered flag: '))

cells = getSize()

screen = Screen()

size = min(screen.window_width() - 10, screen.window_height() - 30) / cells
offset = (cells % 2) * size/2 + size/2  # properly center odd & even cells

turtle = Turtle('square', visible=False)
turtle.shapesize(size / CURSOR_SIZE)
turtle.speed('fastest')
turtle.color('black')
turtle.penup()

for row in range(-cells // 2, cells // 2):
    parity = row % 2  # properly color cells
    turtle.goto(-cells // 2 * size + offset, row * size + offset)

    for column in range(cells):
        turtle.fillcolor(['white', 'black'][parity == column % 2])
        turtle.stamp()
        turtle.forward(size)

screen.exitonclick()

当我们处理较大的绘图块时,冲压也使程序更快。在

相关问题 更多 >

    热门问题