(0-1)%60-> leftCoord =(x-1)%WIDTH(在循环的第一次迭代中,其结果为(0-1)%60)。快要结束了。
摘自《用python自动化无聊的东西》一书。我只是在这里停留在理解这个简单的表达上。对我来说并不简单。在我看来,“%”运算符应评估除法的其余部分。
这是程序中要讨论的表达式之前的部分:
导入随机,时间,副本
WIDTH = 60高度= 20
nextCells = []对于x范围(WIDTH):column = []#创建一个新列。对于范围内的y(高度):如果random.randint(0,1)== 0:column.append('#')#添加一个活细胞。其他:column.append('')#添加一个死单元。nextCells.append(column)#nextCells是列列表的列表。
while为True:#主程序循环。print('\ n \ n \ n \ n \ n')#用换行符分隔每个步骤。currentCells = copy.deepcopy(nextCells)
# Print currentCells on the screen:
for y in range(HEIGHT):
for x in range(WIDTH):
print(currentCells[x][y], end='') # Print the # or space.
print() # Print a newline at the end of the row.
# Calculate the next step's cells based on current step's cells:
for x in range(WIDTH):
for y in range(HEIGHT):
# Get neighboring coordinates:
# % WIDTH ensures leftCoord is always between 0 and WIDTH -1
leftCoord = (x - 1) % WIDTH
rightCoord = (x + 1) % WIDTH
aboveCoord = (y - 1) % HEIGHT
belowCoord = (y + 1) % HEIGHT
为了示例,假设您使用的是10x10的表。
当第一个数字小于第二个数字时,%运算符不太直观。尝试进入交互式python shell并运行4%10。尝试使用8%10。请注意,如何始终获得相同的数字?那是因为除法的答案是0 ...而您的整数被剩余。对于表中的大多数数字,模量根本不起作用。
现在尝试-1%10(模拟这对第一行的作用)。它给您9,指示底行。如果您运行10%10(模拟最下面的行),它将得到0,表示最上面的行。有效地,这使表“自动换行” ...第一行中的单元格影响底部,反之亦然。它还缠绕在侧面。
希望这会有所帮助!