社区首页 >问答首页 >生活游戏--邻居问题

生活游戏--邻居问题
EN

Stack Overflow用户
提问于 2018-02-24 16:01:02
回答 1查看 368关注 0票数 0

我试图用python创建我的生命游戏代码,但是当它检查活动的邻居时,它似乎遇到了问题。我试着解决这个问题已经有两天了,但我还是不知道我错过了什么。下面是分解成碎片的代码。

代码语言:javascript
代码运行次数:0
复制
from random import randrange
from tkinter import *
from time import sleep
root = Tk()
canv = Canvas(width = 800, height = 800)
canv.pack()

def value():
    if randrange(16) == 0:
        return 1
    else:
        return 0 

我在tkinter中设置了画布,并创建了一个决定单元格状态的函数,因此每个单元格都有1/x的机会首先存活。

代码语言:javascript
代码运行次数:0
复制
def pprint(lst):
    for row in lst:
        print(row)

我在尝试调试时创建了一个漂亮的打印函数。

代码语言:javascript
代码运行次数:0
复制
def nb(life,row,col):
    count = 0
    #print(x,y)
    #print(life[x][y])
    for r in [row-1, row, row+1]:
        for c in [col-1,col,col+1]:
            if life[r][c] == 1:
                count += 1
    if life[row][col] == 1:
        count -= 1
    #print(count,end=" ")
    return count

这个函数应该返回一个细胞所拥有的活邻居的数量。(在整个代码中调试时仍有注释)

代码语言:javascript
代码运行次数:0
复制
def ud(life,life2,size,box):        
    #print(life)        
    while True:
        try:
            for row in range(1,size+1):
                for col in range(1,size+1):
                    #print(row,col)
                    a = nb(life,row,col)
                    print("[{0},{1}]".format(row,col), end =" ")
                    print(a, end=" ")
                    
                    if ((1<a) and (a<4)):
                        life2[row][col] = 1
                        canv.itemconfig(box[row-1][col-1], fill ="black")
                                                    
                    else:
                        life2[row][col] = 0
                        canv.itemconfig(box[row-1][col-1], fill ="white")
                print("")                         
            print("ok")
            #print(life2[19][19])
            root.update()
            pprint(life)
            #sleep(5)

            life = life2
            sleep(800/size**2)
            print("")
        except:
            break

这是主要的更新功能。它应该为生命2d数组中的每个单元运行nb函数,并在life2中确定它的值。"box“是一个2d数组,它包含可视网格上每个单元格的矩形tkinter id。(是的,打印函数也用于调试。)

代码语言:javascript
代码运行次数:0
复制
#######
size = 10
w = 10
box = [[canv.create_rectangle(y*w,x*w,y*w+10,x*w+10) for y in range(size)] for x in range(size)]
life = [[value() for y in range(size)] for x in range(size)]
life2 = [[0 for y in range(size+2)] for x in range(size+2)]
for i in range(1,size+1):
    life2[i] = [0] + life[i-1] + [0]
#life = life2

pprint(life)
root.update()
ud(life2,life2,size,box)

del box
del life
del life2

我创建box变量(w =单元格的宽度)并生成随机活单元。然后,我为“生命”创建了一个"0“框架(这样程序在拐角处时就不会中断nb检查。我知道我可以尝试/除了)。然后,我用参数(大小=一行的单元格数;这两个生命矩阵参数都是life2,因为第二个参数将在理论上完全重写)启动ud函数。

那么这个程序有什么问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-24 16:07:35

def ud(life,life2,size,box):中的这一行def ud(life,life2,size,box):使得lifelive2都名称/指向相同的数据。您需要深入复制life2并让life指向绝对分离的数据。

深度复制,因为您的life2包含其他列表,而且如果您只通过执行live = life2[:]进行浅拷贝,那么live仍然会遇到相同的问题--live将有唯一的参考信息在其内部列出,但是内部列表的引用所指向的数据仍将被共享。您可以使用copy.deepcopy(...)进行深度复制。

重命名

代码语言:javascript
代码运行次数:0
复制
import copy
print()
a = [[1,3,5],[2,4,6]]
b = a  # second name, same data
a[0] = [0,8,15]    # replaces the ref on a[0] with a new one, b == a 
a[1][2] = 99       # modifies a value inside the 2nd list ref, b == a
print (a,"=>",b)   # b is just another name for a

输出

代码语言:javascript
代码运行次数:0
复制
# nothing got preserved, both identical as b ist just another name for a
([[0, 8, 15], [2, 4, 99]], '=>', [[0, 8, 15], [2, 4, 99]])

浅拷贝

代码语言:javascript
代码运行次数:0
复制
a = [[1,3,5],[2,4,6]]
b = a[:]  # shallow copy
a[0] = [0,8,15]       # replaces one ref with a new one (only in a)
a[1][2] = 99          # modifies the value inside 2nd list, same ref in a&b
print (a,"=>",b)

输出

代码语言:javascript
代码运行次数:0
复制
# b got "unique" refs to the inner lists, if we replace one in a 
# this does not reflect in b as its ref is unique. chaning values 
# inside a inner list, will be reflected, as they are not uniqe
([[0, 8, 15], [2, 4, 99]], '=>', [[1, 3, 5], [2, 4, 99]])

深拷贝

代码语言:javascript
代码运行次数:0
复制
a = [[1,3,5],[2,4,6]]
b = copy.deepcopy(a)  # deep copy
a[0] = [0,8,15]       # only a modified
a[1][2] = 99          # only in a modified
print (a,"=>",b)

输出

代码语言:javascript
代码运行次数:0
复制
# completely independent - b shares no refs with former a, all got new'ed up
([[0, 8, 15], [2, 4, 99]], '=>', [[1, 3, 5], [2, 4, 6]])

如果您将上面的print替换为

代码语言:javascript
代码运行次数:0
复制
print(id(a), id(a[0]), id(a[1]), id(b), id(b[0]), id(b[1]))

您可以获得a的唯一ID的输出以及它的争用以及b及其内容的输出:

改名:

代码语言:javascript
代码运行次数:0
复制
`a`: 139873593089632, 139873593146976, 139873593072384 
`b`: 139873593089632, 139873593146976, 139873593072384

浅:

代码语言:javascript
代码运行次数:0
复制
`a`: 139873593229040, 139873593089632, 139873593146040
`b`: 139873593227168, 139873593088552, 139873593146040

深:

代码语言:javascript
代码运行次数:0
复制
`a`: 139873593253968, 139873593227168, 139873593072384
`b`: 139873593229040, 139873593089632, 139873593254112
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48968886

复制
相关文章
IP 邻居
是否有垃圾站网站?恩,谁都不想和垃圾网站在一台服务器上,不当占用资源,而且可能连累你。
Denis
2023/04/14
2230
IP 邻居
KNN 算法,从邻居预测未来
KNN (K-Nearest Neighbors) 算法是一种常用的分类与回归方法。它的基本思想是对于给定的一个样本,在训练数据集中寻找与它最近的K个邻居,通过这K个邻居的信息来预测这个样本的类别或数值。
用户10598913
2023/06/02
3150
OSPF邻居down故障定位
执行display logbuffer size buffersize命令,查看如下日志信息。
网络工程师笔记
2021/05/17
2.3K0
ARP协议与邻居子系统剖析
学习过 TCP/IP 协议的同学都应该了解过 TCP/IP 五层网络模型,如下图:
用户7686797
2021/02/24
1.8K0
BGP邻居无法建立故障定位
在两端分别查看无法建立的BGP邻居的情况,例如ipv4单播邻居无法建立可以执行display bgp peer命令,查看Router ID是否冲突。显示Router ID信息的命令行示例如下:
网络工程师笔记
2021/05/17
1.9K0
皮一皮:这样的邻居。。。
好心办坏事啦~~~~没脸待下去了~~求搬家
程序猿DD
2023/04/04
1660
皮一皮:这样的邻居。。。
转:KNN 算法,从邻居预测未来
KNN (K-Nearest Neighbors) 算法是一种常用的分类与回归方法。它的基本思想是对于给定的一个样本,在训练数据集中寻找与它最近的K个邻居,通过这K个邻居的信息来预测这个样本的类别或数值。
啵啵鳐
2023/06/28
1690
OSPF邻居建立的过程_附带分析
今天给大家带来OSPF的基础实验及DR/BDR选举,邻居和邻接建立的文章我还在优化,下期给大家发布
Ponnie
2021/02/24
3.2K0
回帖精选:游戏常用算法问题——小明过桥问题
测试结果 小明 1 小明弟弟 3 小明爸爸 6 小明妈妈 8 小明爷爷 12 ================排序完成,开始送人==================== 小明送小明弟弟(3)总耗时3 小明(1)回总耗时4 小明妈妈送小明爷爷(12)过去总耗时16 小明弟弟(3)回去总耗时19 小明把小明弟弟(3)送过去总耗时22 小明(1)回总耗时23 小明把小明爸爸(6)送过去总耗时29 送完了总耗时 29
李海彬
2019/05/15
6520
回帖精选:游戏常用算法问题——小明过桥问题
【Java】【博弈问题】取球游戏
每次只能取1个、3个、7个或8个球。 n表示对手取球时的球数 public class a { public static boolean f(int n){ if(n>1 && f(n-1)==false) return true; if(n>3 && f(n-3)==false) return true; if(n>7 && f(n-7)==false) return true; if(n>8 && f(n-8)==false)
Regan Yue
2021/09/16
4420
OSPF邻居建立不成功,这些措施安排了没?
在华为路由器上,当OSPF(开放最短路径优先)邻居建立不成功时,可能存在多种原因。本文将详细介绍一些常见故障排查步骤,以解决这个问题。我们将逐一检查邻居两端的接口状态、物理连接、协议状态、网络类型、路由器ID、区域ID、IP地址和掩码等方面的配置。
网络技术联盟站
2023/06/14
9810
OSPF邻居建立不成功,这些措施安排了没?
Lua游戏开发之时区问题
目前大部分游戏都采用了Lua语言进行功能开发,在进行多语种发行的时候就会遇到时区显示的问题。以韩国版本为例,场景如下:
meteoric
2018/11/20
2.1K0
【机器学习】kNN-最近邻居算法(附源码)
算法介绍: kNN (k-Nearest Neighbour) 算法是一种用于分类和回归的非参数的方法,可以用目标点周围所观察到的数据得平均值来预测出目标点 x 的值。本文将会介绍kNN的回归和分类算
量化投资与机器学习微信公众号
2018/01/29
1.6K0
【机器学习】kNN-最近邻居算法(附源码)
北京周边穷邻居,上海周边富亲戚?
我们以GDP总量和人均GDP来衡量城市的贫富程度。为了较为公平地比较京沪对周边城市的影响,我们定义了“环北京城市群”,将京津冀全境、山西全省、辽宁部分地区、内蒙古部分地区纳入其内,使得环北京城市群的规模与长三角城市群同为41个城市(含直辖市和地级市)。
IT阅读排行榜
2018/08/16
5290
北京周边穷邻居,上海周边富亲戚?
OSPF建立邻居关系的7种状态
在Down状态下,OSPF进程还没有与任何邻居交换信息。OSPF在等待进入Init状态。
网络技术联盟站
2023/03/13
1.7K0
OSPF建立邻居关系的7种状态
DGL | 基于JTNN可视化给定分子的邻居分子
JTNN :Junction Tree Variational Autoencoder for Molecular Graph Generation
DrugAI
2021/01/29
9420
深入了解”网上邻居”原理「建议收藏」
说到“网上邻居”,相信很多人都很熟悉。但是说起“网上邻居”的工作机制,可能大家就不太清楚了。
全栈程序员站长
2022/09/20
1.6K0
生活工作杂谈
最近一段时间,应该是很忙了,公司的一个系统出现了问题,已经连跪2周没有休息,每天晚上都将近7八点才回到家,瘦了将近10斤还多,不过通过最近的一直不断的修改和弥补,数据总算恢复的还算不错,内心说实在的还是很有成就感的,虽然工资很低,也许这有时就是一种程序员的宿命和责任感吧,有时手头出现了问题时,不论怎么样,总会想到解决的办法,甚至不吃不睡,都想把这个问题给解决了。而且不求任何回报和奖励,只是为了换回自己内心的一点满足感和成就感。
用户5166556
2019/04/16
3370
使用MikroTik产品-解决NS游戏联机问题②
在上一次我们聊了基础的网络配置已经可以正常上网了,但在日常使用中你可能还会遇到以下几个问题:
海哥@开发
2022/04/06
1.5K0
使用MikroTik产品-解决NS游戏联机问题②
小城生活:深度解读三四线用户互联网生活
根据CEIC数据显示,第六次人口普查中,中国三线及以下城市的消费者占全国的七成以上,GDP占全国的59%,同时三线及以下城市也贡献着中国三分之二的经济增长。随着移动互联网流量红利的消失,用户下沉是互联网行业的必然选择。三线及以下用户已成为一股不可小觑的力量,促使了拼多多式黑马产品的诞生。
酷鹅用户研究院
2018/08/27
8860
小城生活:深度解读三四线用户互联网生活

相似问题

Java:生活游戏-与邻居的问题

11

生活的游戏邻居问题。数组索引越界异常

30

康威的生活游戏邻居计数

23

康威的生活游戏,计算邻居

11

生活的游戏C++,检查邻居

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档