@shindekudasai

Как вывести значение из цикла?

Всем доброго времени суток, хочу сделать калькулятор для работы с двумерными массивами(матрицами), проблема заключается в том, что я хотел бы сделать проверку, что пользователь вводит матрицу квадратного вида.
Пока что дошел до того, что не могу из цикла вывести значение b чтобы сравнить его с n.
n = int(input('Input the number of rows: '))
a = []

def det():
    #Row determination
    for i in range(n):
        row = input(f'Enter the values of your row number {i + 1}: ').split()
        for i in range(len(row)):
            row[i] = int(row[i])
        a.append(row)

#Print your matrix
    for rows in range(len(a)):
        for element in range(len(a[rows])):
            element = int(element)
            print(a[rows][element], end=' ')
        print()
    for rows in range(len(a)):
        for i in range(len(a[rows])):
            b += 1

    if n == len(a):
        print('You entered square matrix.")
    elif n != b:
        print('You entered not a square matrix.')
det()


И вообще хотелось бы комментариев, что может почитать по этой теме или как улучшить код.
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 1
snaiper04ek
@snaiper04ek
Не стреляйте в эникея, он админит как умеет
Немного лучше чем тебя, но далеко от идеала.
Общая суть в том, чтобы код был понятен и без вчитывания в конструкции, которые лежат под функциями и переменными. Должна быть возможность прочитать код, и понять что делается в каждом его участке, без вчитывания в саму реализацию. Должно быть понятно, что лежит в переменной, должно быть понятно что принимает и возвращает функция.

Домашнее задание по улучшению кода - переложить всё нижеописанное в класс, и обработать исключение внутри 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()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы