Top.Mail.Ru
Ответы

Задача "Считать и вывести таблицу", яндекс лицей. Ошибка.

Считать и вывести таблицу
Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
Напишите программу, которая сначала считывает элементы таблицы один за другим, записывает их в список списков с именем table, затем выводит их в виде таблицы.

Формат ввода
На первых двух строках вводятся натуральные числа — количество строк (рядов) в таблице и количество столбцов в таблице.
Далее вводятся сами элементы таблицы — слова, каждое на отдельной строчке; подряд идут элементы сначала первого ряда, затем второго, и так далее.

Формат вывода
Ряды таблицы; каждый ряд — элементы таблицы на одной и той же строке, после каждого элемента выводится символ табуляции.


Примечания
В задаче обязательно нужно создать список списков с указанным именем и записать в него вводимые элементы в указанном порядке.

По дате
По рейтингу
Аватар пользователя
Новичок
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
 #!/usr/bin/python3 
 
#   Функция загружает данные из таблицы очень странного формата: 
#   Первая строка - кол-во строк в таблице 
#   Вторая строка - кол-во столбцов в строке 
#   Далее идут данные для каждого столбца построчно 
#   Возвращает Список списков с загруженными данными таблицы 
def load_strange_table( filename ): 
    table = list() 
    #   Текущая строка 
    n_row = 0 
    #   Текущий столбец 
    n_col = 0 
    #   Максимальное количество строк в табице 
    max_row = 0 
    #   Максимальное количество столбцов в строке 
    max_col = 0 
    try: 
        with open( filename ) as f: 
            #print("DEBUG: Открыт файл '"+filename+"'") 
            #   Используем метод readline чтобы считать первые две строки 
            #   https://docs-python.ru/tutorial/metody-fajlovogo-obekta-potoka-python/metod-file-readline/ 
            max_row = int(f.readline()) 
            max_col = int(f.readline()) 
            #print("DEBUG: строк: "+str(max_row)+" столбцов: "+str(max_col)) 
            #   Породим новую строку в виде пустого списка 
            row = list() 
            #   Дальше читаем в цикле 
            for line in f: 
                #   Удалим мусор из считанной строки 
                line = line.strip() 
                #print("DEBUG: line: '"+line+"'") 
                #  Добавим считанное поле в конец списка с данными строки 
                row.append(line) 
                #   Увеличим счетчик считаных полей 
                n_col = n_col + 1 
                #   Если мы считали все поля одной строки, то надо 
                #   обнулить счетчик считанных колонок и сохранить данные 
                if n_col >= max_col: 
                    n_col = 0 
                    #   Сохраним считанные данные строки в таблице 
                    table.append(row) 
                    #   Породим новую строку в виде пустого списка 
                    row = list() 
                    #   Увеличим счетчик считаных строк 
                    n_row = n_row + 1 
                    if n_row >= max_row: 
                        #   Прервем цикл 
                        break 
 
    except  ValueError: 
        print("Ошибка преобразования строки в число!") 
    except  FileNotFoundError: 
        print("Не удалось открыть файл '"+filename+"'") 
    #print("DEBUG: считано строк: "+str(len(table))) 
    #   Вернем таблицу 
    return  table 
 
#   Загрузим банные из файла input.txt 
table = load_strange_table("input.txt") 
#   Выведем загруженные данные 
for row in table: 
    #   Будем сначала формировать всю строку а потом выводить ее в один заход 
    #   Для формирования используем метод join, который объединяет строки из 
    #   списка в одну, используя указанный разделитель 
    line = "\t".join(row) 
    print(line)