conway生命小游戏中%的问题
import random, time, copyWIDTH = 60
HEIGHT = 20
while True:
nextCells = []
for i in range(WIDTH):
column = []
for y in range(HEIGHT):
if random.randint(0, 1):
column.append('#')
else:
column.append(' ')
nextCells.append(column)
print('\n\n\n\n\n')
currentCells = copy.deepcopy(nextCells)
for y in range(HEIGHT):
for x in range(WIDTH):
print(currentCells, end='')
print()
for x in range(WIDTH):
for y in range(HEIGHT):
leftCoord = (x-1) % WIDTH
rightCoord = (x+1) % WIDTH
aboveCoord = (y-1) % HEIGHT
belowCoord = (y+1) % HEIGHT
numNeighbors = 0
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#' and (numNeighbors == 2 or numNeighbors == 3):
nextCells = '#'
elif currentCells == ' ' and numNeighbors == 3:
nextCells = '#'
else:
nextCells = ''
这个程序有点没搞明白,就是其中的%的用法那里,
leftCoord = (x-1) % WIDTH
rightCoord = (x+1) % WIDTH
aboveCoord = (y-1) % HEIGHT
belowCoord = (y+1) % HEIGHT
这几句话到底是啥意思啊?
哪位前辈给指点一下啊 % 的作用是求余数,比如
3 % 2 = 1 3 除以 2 等于 1 余 1
2 % 1 = 0 2 除以 1 等于 2 余 0
但是我得说句实话,
for x in range(WIDTH):
for y in range(HEIGHT):
leftCoord = (x-1) % WIDTH
rightCoord = (x+1) % WIDTH
aboveCoord = (y-1) % HEIGHT
belowCoord = (y+1) % HEIGHT
numNeighbors = 0
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#' and (numNeighbors == 2 or numNeighbors == 3):
nextCells = '#'
elif currentCells == ' ' and numNeighbors == 3:
nextCells = '#'
else:
nextCells = ''
这段代码执行不执行对输出结果没有任何影响。 nahongyan1997 发表于 2021-6-26 07:36
% 的作用是求余数,比如
3 % 2 = 1 3 除以 2 等于 1 余 1
书上说这是“取模环绕”技术 ,我搞不懂为啥要这么写。
听你这么一说,感觉你是比较了解这个程序的,能不能麻烦你帮我解答一下呢?
谢谢啊
江湖散人 发表于 2021-6-26 10:55
书上说这是“取模环绕”技术 ,我搞不懂为啥要这么写。
听你这么一说,感觉你是比较了解这个程序的,能 ...
书本上的东西还得结合实践使用啊,实践出真知吗{:10_277:} nahongyan1997 发表于 2021-6-27 08:39
书本上的东西还得结合实践使用啊,实践出真知吗
整个程序我知道是干什么的,但是具体到这里我就搞不懂了,这几个百分号语句是什么作用啊?能解释一下吗?谢谢啊 江湖散人 发表于 2021-6-27 16:26
整个程序我知道是干什么的,但是具体到这里我就搞不懂了,这几个百分号语句是什么作用啊?能解释一下吗 ...
我都不知道你的程序是干什么的 nahongyan1997 发表于 2021-6-27 16:31
我都不知道你的程序是干什么的
不好意思啊,忘记和你说了,这是细胞自动机的一个例子。
#表示活的方块,' '表示死的方块。
如果一个活的方块与2个或3个活的方块为邻,那么下一步它还是活的。
如果一个死的方块正好有3个活的邻居,那么下一步它就是活的。
其他的方块在下一步会保持死亡或者活的。
这里每一个方块都有8个邻居,也就是8个方向,上下左右,左上,左下,右下,右上。
这个程序就是要表达这么个意思。 本帖最后由 nahongyan1997 于 2021-6-27 17:31 编辑
江湖散人 发表于 2021-6-27 16:44
不好意思啊,忘记和你说了,这是细胞自动机的一个例子。
#表示活的方块,' '表示死的方块。
如果一个活 ...
是为了防止索引的时候超界的, 举个例子:
(0,0)位置的元素左边的元素是 (-1,0),可是 -1 在列表中并不存在,直接索引肯定会出错,
但是 如果如 当前位置0 x % 左边一个的位置-1= 0,所以这样就不会出现索引越界的情况了,
这样0 % -1 = 0
右边同理,
已知最大宽度 60
60 右边是 61
60 % 61 = 60,
完美答案{:5_95:}
给个最佳{:5_106:} 这才是你想要的效果,
import random, time, copy
WIDTH = 50
HEIGHT = 20
nextCells = []
for i in range(WIDTH):
column = []
for y in range(HEIGHT):
if random.randint(0, 1):
column.append('#')
else:
column.append(' ')
nextCells.append(column)
while True: # 循环要加到这里才对
print('\n\n\n\n\n')
currentCells = copy.deepcopy(nextCells)
for y in range(HEIGHT):
for x in range(WIDTH):
print(currentCells, end='')
print()
for x in range(WIDTH):
for y in range(HEIGHT):
leftCoord = (x-1) % WIDTH
rightCoord = (x+1) % WIDTH
aboveCoord = (y-1) % HEIGHT
belowCoord = (y+1) % HEIGHT
numNeighbors = 0
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#':
numNeighbors += 1
if currentCells == '#' and (numNeighbors == 2 or numNeighbors == 3):
nextCells = '#'
elif currentCells == ' ' and numNeighbors == 3:
nextCells = '#'
else:
nextCells = ' ' # 看看这里跟你的代码是不是不一样
nahongyan1997 发表于 2021-6-27 17:30
是为了防止索引的时候超界的, 举个例子:
(0,0)位置的元素左边的元素是 (-1,0),可是 -1 在列表 ...
谢谢,终于搞明白了。 江湖散人 发表于 2021-6-27 17:49
谢谢,终于搞明白了。
对比一下我新给你改好的代码,看看是不是效果不一样了 nahongyan1997 发表于 2021-6-27 17:51
对比一下我新给你改好的代码,看看是不是效果不一样了
对的,每个图都不一样 了
页:
[1]