2016-07-11 40 views
2

Hallo.Zeichnen eines Schachbretts mit Turtle (gerade Zahl Dimension fehlgeschlagen)

Ich habe gerade diesen Python-Code mit Turtle-Grafiken zum Zeichnen eines Schachbretts nach gegebener Dimension geschrieben. Das Problem, das ich bin vor, wenn ich eine ungerade Zahl alles geben Sie funktioniert gut:

  • Der letzte Platz ist auch gefüllt, ich habe es geschafft, nur nicht auf Bildschirm es Film- Zeit

aber wenn ich eine gerade Zahl eingeben, dann ist es wie: enter image description here

Hier ist der Code:

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()) 

Antwort

2

Eine ähnliche Flag-basierte Lösung mit alternativen Ansätzen. Ich verstehe nicht, was Ihr main() Layout bekommt man so ich es überarbeitet eine potentielle Bibliothek mit dem Testcode ist unter __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

Ich habe Ihren Code nicht durchgesehen, aber es scheint, dass Sie das Problem haben, dass Sie im Gegensatz zu einem echten Schachbrett von Weiß zu Schwarz und umgekehrt wechseln, wenn Sie eine neue Linie von Quadraten erstellen:

schwarz, weiß, schwarz, weiß schwarz, weiß, schwarz, weiß usw.

oder schwarz, weiß, schwarz weiß, schwarz, weiß usw.

während ein Schachbrett ist:

schwarz, weiß, schwarz, weiß WEISS, b Mangel, weiß, schwarz BLACK .... etc.

Sie sehen den Unterschied?

so scheint, dass das Problem zu sein, il versuchen, Ihren Code als gut zu beheben, aber ich glaube, Sie könnte es gelingen, dass

1

Ich schlage vor, eine Flagge für bei der Einstellung zu füllen, anstatt nur, es zu tun, wenn es eine ungerade Zahl ist aus dem Bereich, der dich stolpert, da er nicht von links nach rechts schwarz weiß wird, dann erreicht er ein Ende und geht dann von rechts nach links.

Wie auch immer, hier ist meine Bearbeitung, nur eine einfache Boolesche, die jedes Mal außer wenn in neue Zeile wechseln schaltet. Ich schlage vor, auch turtle.exitonclick statt 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()