我刚开始从interactivepython.org学习Python,并坚持以下练习:
修改海龟步行计划,以便您有两只海龟,每只海龟都有一个随机的起始位置。保持海龟移动,直到其中一个离开屏幕。
这就是我想出的。该程序以1次迭代停止,并且由于某种原因,两只海龟都从相同的坐标开始。
import turtle
import random
wn = turtle.Screen()
kj = turtle.Turtle()
saklep = turtle.Turtle()
saklep.color('green')
c = random.randrange(1,100)
v = random.randrange(1,100)
b = random.randrange(1,100)
n = random.randrange(1,100)
kj.setx(c)
kj.sety(v)
saklep.setx(b)
saklep.sety(n)
def isinscreen(t,s,w):
leftmost=-(w.window_width())/2
rightmost =(w.window_width())/2
uppermost = (w.window_height())/2
bottommost =-(w.window_height())/2
tx = t.xcor()
ty = t.ycor()
sx = s.xcor()
sy = s.ycor()
if tx > rightmost or ty >uppermost:
return False
elif tx < leftmost or ty < bottommost:
return False
elif sx > rightmost or sy > uppermost:
return False
elif sx < leftmost or sy < bottommost:
return False
else:
return True
while isinscreen(kj,saklep,wn) == True:
for i in random.randrange(1,361):
kj.forward(100)
kj.left(i)
for deg in random.randrange(1,361):
saklep.forward(100)
saklep.right(deg)
wn.exitonclick()
答案 0 :(得分:3)
我认为你将randrange
与range
混合在了一起。这一行:
for i in random.randrange(1,361):
触发此错误:
TypeError: 'int' object is not iterable on line 47
由于random.randrange(x,y)
在int
和x
内返回y
。比方说13
。那么你要做的就是做for i in 13
,13
不起作用because for
needs an iterable。你应该这样做:
my_random_number = random.randrange(1,361)
for i in range(1, my_random_number)
检查more informations about range的答案。
此行的评论相同:
for deg in random.randrange(1,361):
关于两只海龟从同一地点开始问题,实际情况并非如此:按设计,turtle.Turtle()
似乎在地点(0, 0)
初始化海龟并且立即绘制它。然后,当您为某些坐标指定kj
和saklep
时,它似乎是用动画移动它们。
只尝试代码的这一部分,你会看到我刚刚描述的内容正在发生:
import turtle
import random
wn = turtle.Screen()
kj = turtle.Turtle()
saklep = turtle.Turtle()
saklep.color('green')
c = random.randrange(1,100)
v = random.randrange(1,100)
b = random.randrange(1,100)
n = random.randrange(1,100)
kj.setx(c)
kj.sety(v)
saklep.setx(b)
saklep.sety(n)