python - 康威的生命游戏创造棋盘和开启细胞
问题描述
我只有一个(很可能)最后一个问题。从我发送最后一个问题开始,我已经取得了一些进展,到目前为止我已经编写了 5/6 个函数(1、2、3、5 和 6),而函数 4 实际上只是将函数 5 和 6 放在一起,这是我需要帮助的。到目前为止,这是我的代码:
"""
Function 1: create a blank grid
input: nothing
return: a blank grid
Function 2: print a given grid
input: a grid
return: nothing
Function 3: load a pattern
input: a file name, a grid
return: nothing
Function 4: advance a grid one generation
input: a grid
return: a new grid advanced by one generation
Function 5: advance a cell one generation
input: a row, a column, a grid
return: whether the cell is alive or not (True or False)
Function 6: determine the number of living neighbors of a cell
input: a row, a column, a grid
return: the number of living neighbors of the cell
"""
living_cell = "O"
dead_cell = "-"
def create_blank_grid():
# # line = [dead_cell for i in range(59)]
# line = []
# for i in range(59):
# line.append(dead_cell)
#
# # grid = [["-"] * 30 for i in range(60)]
# line.append("\n")
# # grid = [line for i in range(30)]
line = []
for i in range(59):
line.append(dead_cell)
line.append("\n")
grid = []
for j in range(30):
grid.append(line[:])
return grid
# print(create_blank_grid())
def print_grid(grid):
for i in grid:
# print(len(i))
for j in i:
if j == "\n":
print(" " * (69 - 59))
else:
print(j, end="")
# print_grid(create_blank_grid())
def load_design(file_name, grid):
myFile = open(file_name, "r")
coordinates = []
for line in myFile:
real_line = line.split()
row, col = real_line[0], real_line[1]
coordinates.append((row, col))
myFile.close()
# turn on certain cells here
for row, col in coordinates:
row, col = int(row), int(col)
# print(row, col)
grid[row][col] = living_cell
# print_grid(grid)
for i in grid:
# print(len(i))
for j in i:
print(j, end="")
# load_design("hertz-oscillator.in", create_blank_grid())
def num_living_neighbors(row, col, grid):
living_neighbors_count = 0
if grid[row][col + 1] == living_cell:
living_neighbors_count += 1
if grid[row][col - 1] == living_cell:
living_neighbors_count += 1
if grid[row + 1][col] == living_cell:
living_neighbors_count += 1
if grid[row - 1][col] == living_cell:
living_neighbors_count += 1
if grid[row + 1][col + 1] == living_cell:
living_neighbors_count += 1
if grid[row + 1][col - 1] == living_cell:
living_neighbors_count += 1
if grid[row - 1][col + 1] == living_cell:
living_neighbors_count += 1
if grid[row - 1][col - 1] == living_cell:
living_neighbors_count += 1
return living_neighbors_count
def adv_cell_one_gen(row, col, grid):
row = int(row)
col = int(col)
# is alive, less than 2 alive neighbors
if grid[row][col] == living_cell and num_living_neighbors(row, col, grid) < 2:
return False
# is alive, 2 or 3 alive neighbors
if grid[row][col] == living_cell and (
num_living_neighbors(row, col, grid) == 2 or num_living_neighbors(row, col, grid) == 3):
return True
# is alive, more than 4 alive neighbors
if grid[row][col] == living_cell and num_living_neighbors(row, col, grid) > 4:
return False
# is dead, has 3 alive neighbors
if grid[row][col] == dead_cell and num_living_neighbors(row, col, grid) == 3:
return True
def adv_grid_one_gen(grid):
# for i in range(len(grid)):
# for j in range(i):
# adv_cell_one_gen(j, i, grid)
for i in grid:
for j in i:
if adv_cell_one_gen(j, i, grid) == True:
grid[i][j] = living_cell
else:
grid[i][j] = dead_cell
return grid
# print(adv_grid_one_gen(create_blank_grid()))
adv_grid_one_gen(create_blank_grid)
功能一:create_blank_grid
功能二:打印网格
功能三:load_design
功能四:adv_grid_one_gen
功能 5:adv_cell_one_gen
功能 6:num_living_neighbors
我知道在 adv_cell_one_gen 函数中,我将 row 和 col 设为整数(使用 row = int(row) 和 col = int(col)),这会导致错误,但如果我不这样做,那么我由于没有整数的索引,会出现索引错误。我认为我的代码在其他地方存在根本缺陷,我不知道在哪里,但我认为我处于死胡同。这是我的问题,我希望你能提供帮助。
解决方案
在"".join(line)
, line 应该是一个字符串列表。
但是,如果我们查看您的代码,您正在附加living_cell
or dead_cell
,您在前两行中将其声明为布尔值。因此,line 现在是一个布尔值列表,这是错误的输入类型。
我不确定你想在这里实现什么,但如果你只想打印输出,你可以做
line.append(str(living_cell))
line.append(str(dead_cell))
推荐阅读
- c# - protobuf-net 可以序列化 MessageContracts 作为 DataContractSerializer 的替代品吗?
- user-interface - 从 Unity 中的 MultiFloatField 中检索值
- mysql - 当您连接 2 个具有相同架构的表并检查除一个以外的所有字段是否相等时,如何避免在 SQL 中编写冗长的 where 子句?
- string - 检查字符串是否在静态编译时集中的最快方法是什么?
- python - 在 Django 的 ORM 中只使用 `foreign_key=` 和 `foreign_key_id=` 有什么区别吗?
- rust - 自动转发操作,同时保持结果包装
- node.js - 是否可以在 Node.js 中检测代码是否执行其他脚本/文件
- javascript - JavaScript画布来回移动矩形
- android - 为什么Android中不同片段中的多个SupportMapFragment重叠?
- socrata - Socrata API - 如何将查询中的空数据字段替换为结果数组中的空字符串