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'。
我收到了错误
UnboundLocalError:赋值前引用的局部变量'x'UnboundLocalError:赋值前引用的局部变量'y'
在第二个函数中移动x
和y
的初始化会修复它。
下面是代码的返工,试图删除重复的代码(总是麻烦的来源)并修复一些错误。
一个错误是你有'1'和'10'作为输入可能性 - 如上所述,'10'中的'1'将首先触发,因此'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')
您可以在绘制网格时计算我在coordsN
和coordsL
中存储的坐标,而不是将该信息硬编码为数据,或者在原始的if
语句中。