2012-06-20 3 views
0

В настоящее время я пытаюсь реализовать Game of Life от Conway в коде и поэтому построил функцию, которая генерирует координаты в зависимости от размера окна.python3 string to variable

def coords_maker(num_x, num_y): 

    num_x += 1 
    num_y += 1 
    coords = [] 
    for i in range (0,num_y, 1):  
     for n in range (0,num_x,1): 
      coords.append ('x'+str(n)+'y'+str(i)) 
    return coords 

Тем не менее, я хотел бы случайным образом присваивать значения результирующих строк, чтобы пометить их либо как живой (1) или мертвым (0). Однако только способ преобразования строки в известное мне имя переменной - через dict и var(), но, тем не менее, для дальнейшего кода важно, чтобы координаты оставались отсортированными, так как я хочу, чтобы иметь возможность итерации по упорядоченных элементов и поместите курсор соответственно на имя координат. Что-то вроде:

print ('\033['+X_COORD+';'+Y_COORD+'f'+ x1y5) 

если, например, x1y5 - соответствующее значение (0 или 1) переменной

Есть ли удобный способ как сделать это с помощью dict или как преобразовать имя строк в имена переменных? Или, возможно. Если я держу один диктофон и один список и сохраняю имена координат в списке и значения в dict?

Спасибо заранее! Кириллу

+1

Почему бы не использовать 2 одномерный массив или список списков? – geoffspear

ответ

1

Вы используете словарь:

def coords_maker(num_x, num_y): 

    num_x += 1 
    num_y += 1 
    coords = {} 
    for i in range (0,num_y, 1):  
     for n in range (0,num_x,1): 
      coords['x'+str(n)+'y'+str(i)] = 0 
    return coords 

Вы затем получить доступ к значению с

coords[x][y] 

И изменить его следующим образом:

coords[x][y] = 1 

Теперь, конечно, это преобразование координат в строки совершенно бессмысленно. Просто используйте список списков:

def coords_maker(num_x, num_y): 

    num_x += 1 
    num_y += 1 
    coords = [[0]*num_x for x in range(num_y)] 
    return coords 

И я не знаю, почему вы добавляете 1 к координатам либо:

def coords_maker(num_x, num_y): 
    return [[0]*num_x for x in range(num_y)] 
+0

Спасибо за ваш быстрый ответ. Но как я могу решить проблему, когда dict не сортирован? – YumTum

+0

@kyril: Почему это будет проблемой? Но в любом случае я добавил несколько менее сложных способов сделать это. –

+0

Спасибо, последняя часть действительно решает проблему. Я просто не знал, как это сделать в противном случае. Я добавил +1 к значениям, так что если я хочу, чтобы окно с ячейками шириной 5 символов, диапазон не останавливался на 4. Последний вопрос: что стоит [0] * num_x в понимании списка? в частности [0]. благодаря! – YumTum