2016-07-11 4 views
2

Здравствуйте.Рисунок шахматной доски с черепахой (с четным номером)

Я только что написал этот код Python с графикой черепах для рисования шахматной доски заданным размером. Проблема я столкнулся, когда я вхожу нечетное число все работает просто отлично:

  • Последний квадрат также наполнен, я просто не успел скриншот это вовремя

Но когда я вхожу четное число, это как: enter image description here

Вот код:

from turtle import * 
import sys 


def main(): 
    dimension = int(input('Enter dimension: ')) 
    side = 50 

    x_coord = -250 
    y_coord = 300 

    turtle = Turtle() 
    turtle.speed('fastest') 
    turtle.pensize(5) 

    for i in range(dimension ** 2): 
     if not i % dimension: 
      y_coord -= side 
      turtle.penup() 
      turtle.setx(x_coord) 
      turtle.sety(y_coord) 
      turtle.pendown() 

     if not i % 2: 
      turtle.begin_fill() 

     for _ in range(4): 
      turtle.forward(side) 
      turtle.right(90) 

     turtle.forward(side) 
     turtle.end_fill() 


if __name__ == '__main__': 
    sys.exit(main()) 

ответ

2

Аналогичного флаг на основе решения с альтернативными подходами. Я не понимаю, каков ваш макет main(), поэтому я переработал его как потенциальную библиотеку с тестовым кодом под __main__:

import turtle 

def draw_board(dimension, x_coord, y_coord, side): 

    parity = False 

    for i in range(dimension ** 2): 
     if i % dimension == 0: 
      y_coord -= side 
      turtle.penup() 
      turtle.setpos(x_coord, y_coord) 
      turtle.pendown() 
      parity = parity != (dimension % 2 == 0) # logical XOR 

     if parity: 
      turtle.begin_fill() 

     for _ in range(4): 
      turtle.forward(side) 
      turtle.right(90) 

     if turtle.filling(): 
      turtle.end_fill() 

     turtle.forward(side) 

     parity = not parity 


if __name__ == '__main__': 
    size = int(input('Enter dimension: ')) 

    turtle.speed('fastest') 

    turtle.pensize(5) 

    draw_board(size, -250, 300, 50) 

    turtle.hideturtle() 

    turtle.exitonclick() 
2

Я не просмотрел ваш код, но кажется, что проблема у вас в том, что в отличие от настоящей шахматной доски, вы меняетесь от белого к черному и наоборот при создании новой строки квадратов, этот пример:

черный, белый, черный, белый черный, белый, черный, белый и т.д.

или черный, белый, черный белый, черный, белый и т.д.

в то время как шахматная доска находится:

черный, белый, черный, белый БЕЛЫЙ, б нехватка, белый, чёрный BLACK .... и т.п.

вы видите разницу?

так, что, кажется, проблема, иль попытаться исправить код Aswell, но я думаю, вы могли бы управлять этим

1

Я предлагаю установки флага, когда для заполнения вместо делать это только тогда, когда это нечетное число из диапазона, который является тем, что вас трогает, так как он не идет черным белым слева направо, он достигает тогда конца, а затем переходит направо налево.

В любом случае, вот мое редактирование, просто простое логическое значение, которое переключается каждый раз, кроме как при переходе в новую строку. Я также предлагаю использовать turtle.exitonclick вместо sys.exit

from turtle import * 

def main(): 
    dimension = int(input('Enter dimension: ')) 
    side = 50 

    x_coord = -250 
    y_coord = 300 

    turtle = Turtle() 
    turtle.speed('fastest') 
    turtle.pensize(5) 

    fill = False 

    for i in range(dimension ** 2): 
     if not i % dimension: 
      y_coord -= side 
      turtle.penup() 
      turtle.setx(x_coord) 
      turtle.sety(y_coord) 
      turtle.pendown() 
      if not dimension % 2: 
       fill = not fill 

     if fill: 
      turtle.begin_fill() 

     for _ in range(4): 
      turtle.forward(side) 
      turtle.right(90) 

     turtle.forward(side) 
     turtle.end_fill() 
     fill = not fill 

if __name__ == '__main__': 
    main() 
    exitonclick()