江湖散人 发表于 2021-6-25 22:27:38

conway生命小游戏中%的问题

import random, time, copy
WIDTH = 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
这几句话到底是啥意思啊?
哪位前辈给指点一下啊

nahongyan1997 发表于 2021-6-26 07:36:08

% 的作用是求余数,比如

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 = ''
这段代码执行不执行对输出结果没有任何影响。

江湖散人 发表于 2021-6-26 10:55:27

nahongyan1997 发表于 2021-6-26 07:36
% 的作用是求余数,比如

3 % 2 = 1   3 除以 2 等于 1 余 1


书上说这是“取模环绕”技术 ,我搞不懂为啥要这么写。
听你这么一说,感觉你是比较了解这个程序的,能不能麻烦你帮我解答一下呢?
谢谢啊

nahongyan1997 发表于 2021-6-27 08:39:48

江湖散人 发表于 2021-6-26 10:55
书上说这是“取模环绕”技术 ,我搞不懂为啥要这么写。
听你这么一说,感觉你是比较了解这个程序的,能 ...

书本上的东西还得结合实践使用啊,实践出真知吗{:10_277:}

江湖散人 发表于 2021-6-27 16:26:59

nahongyan1997 发表于 2021-6-27 08:39
书本上的东西还得结合实践使用啊,实践出真知吗

整个程序我知道是干什么的,但是具体到这里我就搞不懂了,这几个百分号语句是什么作用啊?能解释一下吗?谢谢啊

nahongyan1997 发表于 2021-6-27 16:31:51

江湖散人 发表于 2021-6-27 16:26
整个程序我知道是干什么的,但是具体到这里我就搞不懂了,这几个百分号语句是什么作用啊?能解释一下吗 ...

我都不知道你的程序是干什么的

江湖散人 发表于 2021-6-27 16:44:09

nahongyan1997 发表于 2021-6-27 16:31
我都不知道你的程序是干什么的

不好意思啊,忘记和你说了,这是细胞自动机的一个例子。
#表示活的方块,' '表示死的方块。
如果一个活的方块与2个或3个活的方块为邻,那么下一步它还是活的。
如果一个死的方块正好有3个活的邻居,那么下一步它就是活的。
其他的方块在下一步会保持死亡或者活的。
这里每一个方块都有8个邻居,也就是8个方向,上下左右,左上,左下,右下,右上。
这个程序就是要表达这么个意思。

nahongyan1997 发表于 2021-6-27 17:30:28

本帖最后由 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:}

nahongyan1997 发表于 2021-6-27 17:47:18

这才是你想要的效果,
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 = ' '   # 看看这里跟你的代码是不是不一样


江湖散人 发表于 2021-6-27 17:49:53

nahongyan1997 发表于 2021-6-27 17:30
是为了防止索引的时候超界的, 举个例子:
(0,0)位置的元素左边的元素是 (-1,0),可是 -1 在列表 ...

谢谢,终于搞明白了。

nahongyan1997 发表于 2021-6-27 17:51:42

江湖散人 发表于 2021-6-27 17:49
谢谢,终于搞明白了。

对比一下我新给你改好的代码,看看是不是效果不一样了

江湖散人 发表于 2021-6-27 17:54:26

nahongyan1997 发表于 2021-6-27 17:51
对比一下我新给你改好的代码,看看是不是效果不一样了

对的,每个图都不一样 了
页: [1]
查看完整版本: conway生命小游戏中%的问题