随机运动的两只乌龟

时间:2015-04-20 17:29:52

标签: python turtle-graphics

我刚开始从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()

1 个答案:

答案 0 :(得分:3)

我认为你将randrangerange混合在了一起。这一行:

for i in random.randrange(1,361):

触发此错误:

TypeError: 'int' object is not iterable on line 47

由于random.randrange(x,y)intx内返回y。比方说13。那么你要做的就是做for i in 1313不起作用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) 初始化海龟并且立即绘制它。然后,当您为某些坐标指定kjsaklep时,它似乎是用动画移动它们。

只尝试代码的这一部分,你会看到我刚刚描述的内容正在发生:

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)