,逗号, 发表于 2018-12-19 19:40:03

37讲

课后题中:游戏编程:按以下要求定义一个乌龟类和鱼类并尝试编写游戏。(初学者不一定可以完整实现,但请务必先自己动手,你会从中学习到很多知识的^_^)qOUdQsH
O4wY6:=cn7AVNs_5kd?,o-
假设游戏场景为范围(x, y)为0<=x<=10,0<=y<=10
它们的移动方向均随机
乌龟的最大移动能力是2(Ta可以随机选择1还是2移动),鱼儿的最大移动能力是1
def move(self):
      # 随机计算方向并移动到新的位置(x, y)
      new_x = self.x + r.choice()
      new_y = self.y + r.choice()
      这是乌龟类中移动的方法的一部分,是不是每次移动,在x,y上都会发生移动

,逗号, 发表于 2018-12-19 19:50:40

本帖最后由 ,逗号, 于 2018-12-19 19:54 编辑

for each_fish in fish[:]:
      if each_fish.move() == pos:
            # 鱼儿被吃掉了
            turtle.eat()
            fish.remove(each_fish)
            print("有一条鱼儿被吃掉了...")
还有这个,判断每条鱼,for each_fish in fish[:]如果改成for each_fish in fish,小甲鱼说迭代器中直接引用列表的数据会产生意想不到的问题,不太明白为什么会产生问题

heidern0612 发表于 2018-12-20 08:26:22

1、乌龟的初始坐标是随机的,每次移动是在随机的choice上作加减。

2、假如你现在有个列表【1,2,3,4,5】5个数,你用for循环,循环一次减一个数。

for循环到第三次的时候,就只有两个数了,还怎么继续循环?

remove的原理是remove一个元素之后下一个元素自动补位,所以你五次循环只能循环三次。



而用切片复制的意义就在这。你可以for循环列表的复制体,然后去掉原始列表里面数据。

这样切片复制没动,而原始列表去除数据,for循环也可以继续下去。


你可以把下面代码拷贝进你IDLE试一下:

list1 =
list2 =


for i in list1[:]:
    list1.remove(i)
    print("五次循环循环五次")


for i in list2:
    list2.remove(i)
    print("五次循环只循环三次")


页: [1]
查看完整版本: 37讲