第37讲作业中的龟吃鱼问题有个疑问
原贴地址:https://fishc.com.cn/thread-48620-1-2.html下面是我有疑问的代码:
while True:
if not len(fish):
print("鱼儿都吃完了,游戏结束!")
break
if not turtle.power:
print("乌龟体力耗尽,挂掉了!")
break
pos = turtle.move()
# 在迭代器中删除列表元素是非常危险的,经常会出现意想不到的问题,因为迭代器是直接引用列表的数据进行引用
# 这里我们把列表拷贝给迭代器,然后对原列表进行删除操作就不会有问题了^_^
for each_fish in fish[:]:
if each_fish.move() == pos:
# 鱼儿被吃掉了
turtle.eat()
fish.remove(each_fish)
print("有一条鱼儿被吃掉了...")
这一部分将列表拷贝给迭代器是不是会出现另外一种问题,就是已经吃掉的鱼在迭代器(fish[:])中还是存在的,这样的话,因为随机移动,吃掉的鱼在龟附近,所以会更容易随机再一次被判断为被龟吃掉。但是这个鱼已经被从fish列表中被移除了,这时候会不会出现报错?因为我运行的时候没有报错,但不确定是不是自己没有考虑理解全面。 {:10_256:} 我 这是对fish进行操作的吧,fish[:]代表的是fish数组从开头到结尾,这个数组是可以更改的,for里面的修改会影响到fish[:]。
页:
[1]