У меня есть школьное задание, и поэтому мы должны использовать PyCharm и следовать стандартам PEP8 и Google относительно Python3.Хотя мой код работает отлично, PyCharm утверждает, что индекс row [0] имеет неожиданное значение.
def create_matrix():
"""
Function made to create a matrix of who wins or who loses based on the number of figures in a game.
Keep in mind the order of the figures tuple. first element wins over second element, last element wins over
first element. an element also wins against the element two steps before it, in the case of five elements.
i haven't researched what relationships exist in higher dimensions, but there will always be an equal amount of
elements who beat you, as elements you beat. the missing element will be a draw.
"""
figures = ("Scissors", "Paper", "Rock", "Lizard", "Spock") # caution with order of elements
number_of_figures = len(figures) # expected to be an odd number
half_set = number_of_figures // 2 # half_set = int((n-1)/2)
win_and_lose = [+1, -1] # negative: row (player_b), positive: column (player_a), zero: draw
rows = [[None]*number_of_figures]*number_of_figures # uses same size in memory as a "full" set
rows[0] = [0] + win_and_lose*half_set # [0, -1, +1, -1, +1...]
for row in range(1, number_of_figures):
rows[row] = rotate(rows[row-1], 1)
# for row in range(0, len(rows)):
# print(rows[row])
return figures, rows

Я проверил изменение конкретной строки, которая дает мне предупреждение о ворсинке, до
rows[0][0], rows[0][1], rows[0][2], rows[0][3], rows[0][4] = [0] + win_and_lose*half_set # [0, -1, +1, -1, +1...]
иКод работает без предупреждения.Проблема в том, что я хочу, чтобы кортеж был расширяемым по размеру.Я знаю, что могу сделать это с помощью цикла for в соответствии с
for column in range(0, number_of_figures):
if column == 0:
rows[0][column] = 0
elif column % 2 == 0:
rows[0][column] = +1
elif column % 2 == 1:
rows[0][column] = -1
else:
raise Exception("Unexpected column value")
, но у меня есть некоторые проблемы с этим:1) Он вообще не читается тем, кто хочет посмотреть код.2) Когда я пытаюсь напечатать список сейчас, он установил все строки на [0, -1, +1, +1, -1], а не только на первый элемент, как я ожидаю.Это не вызывает каких-либо ошибок во время выполнения, но это не то, что я хочу.
У меня вопрос, как я могу написать этот фрагмент кода на языке Python и легко читать, не нарушая никаких стандартов Python.
Бонусный вопрос: Я хочу минимизировать объем используемой памяти моего кода, и я видел через __sizeof __ (), что, если строки содержат пять элементов со значением None, он использует 80 байтов памяти,Тот же самый размер используется, если у меня есть пять элементов со значением [Нет, Нет, Нет, Нет, Нет].Размер остается неизменным, как только я установил некоторые значения для матрицы.Любые советы по этому поводу?Я настроил функцию rotate (), чтобы я мог вращать список на n позиций одновременно, чтобы я мог перейти к любой строке, в которой определена первая строка.