2015-07-17 1 views
-1
def initial_board(row, col, array): 

    firstList = [[0] * col for i in range(row)] 
    for i in firstList: 
     i.append(-1) 
     i.insert(0,-1) 
    firstList.insert(0, [-1] * (col + 2)) 
    firstList.append([-1] * (col + 2)) 

    while True: 
     coordinateInput = input('Enter the coordinates of a seed cell as \"r c\": ') 
     if coordinateInput == '': 
      break 
     point = coordinateInput.split(' ', 1) 
     row = int(point[0]) 
     col = int(point[1]) 
     firstList[row][col] = 1 

    return firstList 

def next_board(row, col, current, new): 

    for i in range(1, row - 1): 
     for j in range(1, col - 1): 
      new[i][j] = live_conditions(i, j, current) 

def live_conditions(x, y, array): 

    cellCount = 0 
    for j in range(y - 1, y + 1): 
     for i in range(x - 1, x + 1): 
      if not(i == x and j == y): 
       if array[i][j] != -1: 
        cellCount += array[i][j] 
    if array[x][y] == 1 and cellCount < 2: 
     return 0 
    if array[x][y] == 1 and cellCount > 3: 
     return 0 
    if array[x][y] == 0 and cellCount == 3: 
     return 1 
    else: 
     return array[x][y] 

def print_board(row, col, array): 

    for i in range(row + 2): 
     for j in range(col + 2): 
      if array[i][j] == 1: 
       print('*', end =' ') 
      else: 
       print(' ', end =' ') 
     print() 

def game_board(): 

    while True: 
     try: 
      row = int(input('What size board? ')) 
      if row > 0: 
       col = row 
       break 
      else: 
       continue 
     except ValueError or dimension <= 0: 
      pass 
    firstList = [] 
    nextlist = [] 
    firstList = initial_board(row, col, firstList) 
    nextList = [row[:] for row in firstList] 

    print() 

    generations = int(input('How many generations?: ')) 
    for gen in range(generations): 
     print('Gen: ', gen) 
     print_board(row, col, firstList) 
     next_board(row, col, firstList, nextList) 
     firstList, nextList = nextList, firstList 

game_board() 

Однако, когда я запускаю его с входом 5 5 я получаю это:я кодирование игры Конвея жизни в питоне, и мой код до сих пор это:

What size board? 5 
Enter the coordinates of a seed cell as "r c": 5 5 
Enter the coordinates of a seed cell as "r c": 

How many generations?: 3 
Gen: 0 





      * 

Gen: 1 





      * 

Gen: 2 





      * 

Я чувствую как проблема в моей функции live_conditions, с cellCount не работает должным образом. Что я делаю не так?

+0

код не копируется. –

+0

Вставка всей вашей кодовой базы здесь не приветствуется - образцы кода должны быть минимальными, необходимыми для воспроизведения вашей непосредственной проблемы; если вы не указали * свою непосредственную проблему, вы еще не готовы задать вопрос о StackOverflow. См. Также http://sscce.org/ и http://stackoverflow.com/help/mcve. –

ответ

0

Я думаю, что это ваша проблема, или в любом случае одна проблема:

for j in range(y - 1, y + 1): 

Как вы написали диапазон, это итерация по списку [у-1, у], а не [у-1 , y, y + 1], как вы предполагали. Из документов:

последний элемент является самым крупным старт + я * шаг меньше, чем остановить

Это трудно, однако, видеть, как эта ошибка приводит к тому, точная проблема, которую вы видите; он все равно должен считать нулевые соседи для единственной живой клетки и вытирать ее. Я сделаю свое общее предложение: добавьте кучу операторов печати и посмотрите, что делает код при его запуске.

Редактировать добавить: на самом деле у вас аналогичная проблема в next_board - вы только обновляете диапазон [0, ряд-1]. Таким образом, нижний правый угол никогда не обновляется. Предложите вам проверить каждый вызов диапазона для ошибок «один за другим».

Смежные вопросы