Python и матрица, перемещение столбцов и строк - PullRequest
0 голосов
/ 24 мая 2018

У меня небольшая проблема с моим скриптом Python.

На самом деле, я работаю над реальной светодиодной матрицей 8x8 и хочу нарисовать текст с анимацией (справа налево, слева направо, довниз, вниз вверх).

Например, я хочу написать букву Е.Итак, я создал матрицу E:

matrix =[
"1","1","1","1","1","1","1","1",
"1","1","1","1","1","1","1","1",
"1","1","0","0","0","0","0","0",
"1","1","1","1","1","0","0","0",
"1","1","1","1","1","0","0","0",
"1","1","0","0","0","0","0","0",
"1","1","1","1","1","1","1","1",
"1","1","1","1","1","1","1","1"]

Like this

Но теперь представьте, что я хочу переместить E для создания анимации.Если я переместлю свою букву E влево, восьмой столбец будет пустым, а через 1 с, седьмой тоже и т. Д. И когда моя матрица станет полностью пустой, моя буква E снова начнется в правильном положении ...

У вас есть идея, как я могу сделать это с массивом, матрицей или чем-то еще?

Спасибо

РЕДАКТИРОВАТЬ, тест кода с https://www.jdoodle.com/python3-programming-online:

matrix = [  [0, 0, 0, 1, 0], 
            [0, 0, 0, 1, 0],
            [0, 0, 0, 1, 0], 
            [0, 0, 0, 1, 0], 
            [0, 0, 0, 1, 0]]

print(matrix)

def shift(my2dArray):
    for _ in range(5): # shift to the left 8 times - brute force
        for row in my2dArray:
            row.pop(0) # removes first element of each row
            row.append("0") # add "0" to the end of the row
        # code to update display here and sleep for a bit

shift(matrix)

print(matrix)

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Другой способ с NumPy.Который также является масштабируемым.Независимо от размера вашего массива.Вы просто меняете формы.Код, который я запускаю ниже и работает нормально.Просто замените число 8 в цикле for на форму массива.

import numpy as np
import time
array = np.random.randint(2,size=(8,8))
print(array)
originalarray = array.copy()
print("------------------------------")
for i in range(8):
 endposition = 8-i-1; # the 8th first iter, the 7th in second iter etc               
for j in range(endposition):
    column = array[:,j+1]
    array[:,j] = column
array[:,endposition:] = np.zeros((8,1)) # all the columns to the right are zeros
time.sleep(1)   # 1 second delay
print(array)
print("----------------------------------")
time.sleep(1)   # 1 second delay
print(originalarray)
0 голосов
/ 24 мая 2018

(как предложил s3n0) Сначала вы хотите объявить двумерный массив

 my2dArray = [["1","1","1","1","1","1","1","1"],
    ["1","1","1","1","1","1","1","1"],
    ["1","1","0","0","0","0","0","0"],
    ["1","1","1","1","1","0","0","0"],
    ["1","1","1","1","1","0","0","0"],
    ["1","1","0","0","0","0","0","0"],
    ["1","1","1","1","1","1","1","1"],
    ["1","1","1","1","1","1","1","1"]]

Затем, ради простого алгоритма, вы можете сделать следующее ... (при условии сетки 8x8):

def shift_left(my2dArray):
    for _ in range(8): # shift to the left 8 times - brute force
        for row in my2dArray:
            row.pop(0) # removes first element of each row
            row.append("0") # add "0" to the end of the row
        # code to update display here and sleep for a bit

Это пример смещения вашего дисплея влево, я собираюсь оставить остальные (другие направления) вам, чтобы выяснить, так как они очень похожи на этот алгоритм.

Для перемещения вверх и вниз просто вызовите функции списка на один уровень выше в алгоритме:

def shift_up(my2dArray):
    for _ in range(8): # shift to the left 8 times - brute force
        my2dArray.pop(0) # removes first element of each column
        my2dArray.append(["0","0","0","0","0","0","0","0"]) # add "0" to the end of the columns
        # code to update display here and sleep for a bit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...