import turtle
wn=turtle.Screen()
wn.bgcolor("white")
#-Turtle_box-
alex=turtle.Turtle()
alex.shape("turtle")
alex.speed(10)
alex.pensize(2)
alex.color("red")
#-Turtle_box_end-
#-Turtle_first-
sapa=turtle.Turtle()
sapa.shape("turtle")
sapa.speed(2)
sapa.pensize(2)
sapa.color("red")
#-Turtle_first_end-
#-Var&list-start-
liss=[]
#-Var&list-end-
#-Turtle_box_start-
alex.penup()
alex.forward(300)
alex.left(90)
alex.pendown()
for i in range(300):
alex.forward(1)
x=alex.position()
liss.append(x)
for i in range(3):
alex.left(90)
for i in range(600):
alex.forward(1)
liss.append(alex.position())
alex.left(90)
for i in range(300):
alex.forward(1)
liss.append(alex.position())
#-Turtle_box_end-
#-Turtle_first_start-
for i in range(100000):
sapa.forward(1)
if sapa.position() in liss:
sapa.left(150)
wn.exitonclick
问:乌龟“亚历克斯”做一个长方形(盒子)600px*600px,并将所有坐标写在liss列表中。然后乌龟“萨帕”向前走,若乌龟碰到矩形的墙,他必须向左旋转150度。乌龟“萨帕”必须在矩形中无限大,但在我的程序中,乌龟向左拐一次,乌龟就看不到墙了。哪里出问题了。在
因为alex从整数坐标开始,每一步移动1个单位,所以存储在
liss[]
中的所有位置都是整数。但是在sapa反弹了150度之后,他的坐标不再是整数,所以它们不太可能与liss[]
中的值完全匹配。在解决这一问题的方法是使用修改后的position函数,该函数将坐标舍入到
int
。例如,将此函数放在程序顶部附近:现在把你的
liss.append(alex.position())
到
liss.append(int_position(alex))
别忘了修复
x=alex.position()
liss.append(x)
现在把sapa的东西改成
^{pr2}$FWIW,在我的程序版本中,我使用了
sapa.color("blue")
来更容易地看到发生了什么。在因为您使用的是python2,所以应该将
range(100000)
etc改为xrange(100000)
,因为这样更高效,而且使用的RAM更少。在由于列表
liss
中的所有值都是整数,并且在sapa's
反弹之后,所有坐标值都是以点(浮点值)为单位的,因此在与liss
值比较之前,需要对这些值进行四舍五入。在相关问题 更多 >
编程相关推荐