Немного лучше чем тебя, но далеко от идеала.
Общая суть в том, чтобы код был понятен и без вчитывания в конструкции, которые лежат под функциями и переменными. Должна быть возможность прочитать код, и понять что делается в каждом его участке, без вчитывания в саму реализацию. Должно быть понятно, что лежит в переменной, должно быть понятно что принимает и возвращает функция.
Домашнее задание по улучшению кода - переложить всё нижеописанное в класс, и обработать исключение внутри row_len_check()
з.ы. Одна функция здесь лишняя, +10 к icq если узнаешь какая и избавишься от неё рефактором.
def take_input_from_keyboard(message):
keyboard_input = input(f'{message}')
return keyboard_input
def row_constructor(row_number):
message = f'Enter the values of your row number {row_number}: '
rows_values_raw = take_input_from_keyboard(message)
row = string_array_to_int_array_constructor(rows_values_raw)
return row
def matrix_constructor():
message = 'Input the count of rows: '
rows_count = int(take_input_from_keyboard(message))
matrix = []
for i in range(rows_count):
row = row_constructor(i + 1)
row_len_check(row, i)
matrix.append(row)
return matrix
def string_array_to_int_array_constructor(raw_string):
int_array = []
string_array = raw_string.split()
while len(string_array):
next_number = int(string_array.pop(0))
int_array.append(next_number)
return int_array
def row_len_check(row, iteration):
"""
if it's first iteration: creating row lenght reference
if second dnd above: comparasion row lenght with reference
if row lenght and referece not equal, raise exception
"""
if iteration == 0:
global reference
reference = len(row)
return
for i in range(len(row)):
if len(row) != reference:
raise Exception
return
def matrix_print(matrix):
for rows in range(len(matrix)):
for element in range(len(matrix[rows])):
element = int(element)
print(matrix[rows][element], end=' ')
print()
return
def main():
matrix = matrix_constructor()
matrix_print(matrix)
main()