37讲
课后题中:游戏编程:按以下要求定义一个乌龟类和鱼类并尝试编写游戏。(初学者不一定可以完整实现,但请务必先自己动手,你会从中学习到很多知识的^_^)qOUdQsHO4wY6:=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: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,小甲鱼说迭代器中直接引用列表的数据会产生意想不到的问题,不太明白为什么会产生问题
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]