Python Turtle Graphics窗口崩溃

时间:2018-01-04 14:19:22

标签: python python-3.x turtle-graphics

def whatever()

def whatever2()

当试图在蟒蛇龟中创建战舰时,我遇到了一个问题。 我正在使用def函数。 但每次第一个def函数完成时,乌龟图形窗口都会崩溃。 我尝试在第一个def函数之后使用turtle.done()来防止它崩溃。但是,通过执行此操作,它将不会执行第二个def函数。

根据要求提供整个代码:

    import turtle
i=0
def speelveld():
    turtle.ht()
    x=200
    y=200
    turtle.tracer(10, 0)
    for i in range(10):
        y-=40
        turtle.penup()
        turtle.goto(0,y)
        turtle.pendown()
        x=200
        for i in range(10):
            x-=40
            turtle.goto(x,y)
            for i in range(4):
                turtle.forward(40)
                turtle.left(90)
    y=170
    for i in range(10):
        coordsN = ['1','2','3','4','5','6','7','8','9','10']
        turtle.penup()
        turtle.goto(-220,y)
        turtle.pendown()
        turtle.write(coordsN[i],font=("Calibri", 14, "normal"))
        y-=40
        i=+1
    i=0
    x=-180
    for i in range(10):
        coordsL = ['A','B','C','D','E','F','G','H','I','J']
        turtle.penup()
        turtle.goto(x,205)
        turtle.pendown()
        turtle.write(coordsL[i],font=("Calibri", 14, "normal"))
        x+=40
        i=+1   

speelveld()
x=y=0
def veldkleuren():
    gok = input('Typ een coördinaat in: ')
    if '1' in gok:
        y=150
    elif '2' in gok:
        y=110
    elif '3' in gok:
        y=70
    elif '4' in gok:
        y=30
    elif '5' in gok:
        y=-10
    elif '6' in gok:
        y=-50
    elif '7' in gok:
        y=-90
    elif '8' in gok:
        y=-130
    elif '9' in gok:
        y=-170
    elif '10' in gok:
        y=-210
    else:
        print('Ongeldige invoer')
    if 'A' in gok:
        x=-190
    elif 'B' in gok:
        x=-150
    elif 'C' in gok:
        x=-110
    elif 'D' in gok:
        x=-70
    elif 'E' in gok:
        x=-30
    elif 'F' in gok:
        x=10
    elif 'G' in gok:
        x=50
    elif 'H' in gok:
        x=90
    elif 'I' in gok:
        x=130
    elif 'J' in gok:
        x=170
    else:
        print('Ongeldige invoer')

    turtle.penup()
    turtle.goto(x,y)
    turtle.pendown()
    turtle.write('X',font=("Calibri", 39, "normal"))

veldkleuren()
exit = input('press enter to exit')

第一个def用于绘制战舰的战场。

第二个def是输入并在输入点标记'X'。

2 个答案:

答案 0 :(得分:0)

我收到错误

  

UnboundLocalError:局部变量' x'在分配之前引用   UnboundLocalError:局部变量' y'在分配前引用

在第二个函数中移动xy的初始化会修复它。

答案 1 :(得分:0)

下面是代码的返工,尝试删除重复的代码(总是麻烦的来源)并修复一些错误。

一个错误是你有' 1'和' 10'作为输入的可能性 - 正如所写,' 1'在' 10'会先触发所以' 10'永远不会触发。我只是通过使用' 0'来修复它。 - ' 9',即所有独特字符,但还有其他方法可以解决此问题。

另请注意,在这样的代码中:

for i in range(10):
        # ...
        i=+1

最后一行设置i没有任何区别,可以删除。即使你做过i += 1,它仍然无关紧要。循环重置i

最后,乌龟笔不一定要打电话给.write()

import turtle

SMALL_FONT = ("Calibri", 14, "normal")
LARGE_FONT_SIZE = 39
LARGE_FONT = ("Calibri", LARGE_FONT_SIZE, "normal")

coordsN = {'0': 180, '1': 140, '2': 100, '3': 60, '4': 20, '5': -20, '6': -60, '7': -100, '8': -140, '9': -180}

coordsL = {'A': -180, 'B': -140, 'C': -100, 'D': -60, 'E': -20, 'F': 20, 'G': 60, 'H': 100, 'I': 140, 'J': 180}

def speelveld():
    turtle.hideturtle()
    turtle.tracer(0)

    y = 200

    for _ in range(10):
        y -= 40
        turtle.penup()
        turtle.goto(0, y)
        turtle.pendown()
        x = 200

        for _ in range(10):
            x -= 40
            turtle.goto(x, y)

            for _ in range(4):
                turtle.forward(40)
                turtle.left(90)
    turtle.penup()
    turtle.setx(-220)
    y = 170

    for i in range(10):
        turtle.sety(y)
        turtle.write(i, align='right', font=SMALL_FONT)
        y -= 40

    turtle.sety(205)
    x = -180

    for i in range(10):
        turtle.setx(x)
        turtle.write(chr(ord('A') + i), align='center', font=SMALL_FONT)
        x += 40

    turtle.tracer(1)

def veldkleuren():
    x = y = 0

    gok = input('Typ een coördinaat in: ')

    for column in coordsL:
        if column in gok:
            x = coordsL[column]
            break
    else:  # no break
        exit('Ongeldige invoer')

    for row in coordsN:
        if row in gok:
            y = coordsN[row]
            break
    else:  # no break
        exit('Ongeldige invoer')

    turtle.penup()
    turtle.goto(x, y - LARGE_FONT_SIZE/2)

    turtle.write('X', align='center', font=LARGE_FONT)

speelveld()

veldkleuren()

input('press enter to exit')

您可以在绘制网格时计算我在coordsNcoordsL中隐藏的坐标,而不是将该信息硬编码为数据,或者在if语句中计算原始坐标。