|
发表于 2020-3-7 21:46:41
|
显示全部楼层
- def move(p):
- import random
- direction=random.randint(0,1)#用0代表x轴,用1代表y轴
- minus=random.randrange(-1,2,2)#用-1代表负方向,用1代表正方向
- p[direction] += minus#一次移动
- return p
- #设置初始值
- f={}
- #f={i: [0,0] for i in range(3)}
- f=f.fromkeys('abc', [0, 0])
- f1=dict(a=[1,1],b=[2,2],c=[3,3])
- for i in (f.keys()):#10个鱼分别移动一次
- f[i]=move(f1[i])
- print(f)
复制代码
我把你的代码简化了一下,然后这样改了之后就正常了,我试了几次觉得原因是出在了你22行move(f0[i])这里的,其次是f0是通过fromkeys这个工厂函数生成的,然后我是这么个理解不知道对不对哈
你循环的时候修改f0[i]的时候,由于它是绑定的是fromkeys这个工厂函数的,于是代码在执行move这个函数的时候,先去fromkeys这里查询这个值,然后再跑去执行move,然后带着move后的值返回fromkeys这里,按工厂函数的方法给各个key赋值一次,所以其实你每次循环的值,都是对每个key的值重新赋了个一样的值
所以只要避开这两点就好了,两种方法
第一种
就是版主 冬雪雪冬 说的把你创建f0的方法改成别的
第二种
给move传入的参数改成别的,不是你的f0的其他东西都可以
ps:好像py读取东西都是往上读取,好比如你的def move是写在最上面一样,然后按着这个思路来理解的,不一定对,不过我试过zltzlt版主的方法,好像是行不通的 |
|