huangdongdong 发表于 2021-3-30 17:07:21

小白

while True:
    if not len(fish):
      print("鱼儿都吃完了,游戏结束!")
      break
    if not turtle.power:
      print("乌龟体力耗尽,挂掉了!")
      break

    pos = turtle.move()
    # 在迭代器中删除列表元素是非常危险的,经常会出现意想不到的问题,因为迭代器是直接引用列表的数据进行引用
    # 这里我们把列表拷贝给迭代器,然后对原列表进行删除操作就不会有问题了^_^
    for each_fish in fish[:]:                      #为何要进行切片,而不是for each_fish in fish:
      if each_fish.move() == pos:
            # 鱼儿被吃掉了
            turtle.eat()
            fish.remove(each_fish)
            print("有一条鱼儿被吃掉了...")


ba21 发表于 2021-3-30 17:07:22

huangdongdong 发表于 2021-3-30 22:39
为何fish[:]就是把列表拷贝给迭代器

a = fish[:]
for each_fish in a:
   

ba21 发表于 2021-3-30 20:46:55

# 在迭代器中删除列表元素是非常危险的,经常会出现意想不到的问题,因为迭代器是直接引用列表的数据进行引用
    # 这里我们把列表拷贝给迭代器,然后对原列表进行删除操作就不会有问题了^_^

for each_fish in fish[:] fish[:]    把列表拷贝一份给迭代器

huangdongdong 发表于 2021-3-30 22:39:45

ba21 发表于 2021-3-30 20:46
# 在迭代器中删除列表元素是非常危险的,经常会出现意想不到的问题,因为迭代器是直接引用列表的数据进行 ...

为何fish[:]就是把列表拷贝给迭代器
页: [1]
查看完整版本: 小白