Задачи про Файлы

Несколько общих слов про решение задач в этом разделе и в следующих

Начиная с этого раздела я не даю тестов к задачам на repl.it, их нет. Я вряд ли сделаю их сам в ближайшее время, но я готов принять от вас помощь в создании тестов. Про это есть отдельный раздел ниже.

Как оформлять задачи

Так как тестов нет, вам нужно самостоятельно придумывать заголовки функциям. Это становится частью задачи — придумать функцию с понятным названием, и которую будет удобно использовать.

Если в условии написано, что даны какие-то данные, значит, вы должны создать функцию, которая получает эти данные в виде аргумента. Например, если сказано, что функция получает на вход два целых числа, а возвращает их сумму, значит, нужна функция с заголовком:

def sum_numbers(a, b):

Кроме того, напоминаю, что мы договаривались создавать функции одного из двух видов:

  1. чистые функции, они не имеют побочных эффектов, т.е. ничего не печатают на экране, не изменяют никаких файлов, не изменяют переданные им объекты, внешние переменные, т.е. не делают ничего, что заметно вне вызова функции. Такие функции обязательно возвращают результат вычислений, ради которого их и вызывают.
  2. функции-операции. Они печатают на экран, выводят данные в файлы, изменяют переданные аргументы, например, переворачивают переданный им список, т.е. имеют побочные эффекты. Такие функции не должны возвращать ничего.

Если в задаче явно не сказано обратного, вы должны делать либо чистую функцию, либо функцию-операцию. Это требование именно для наших задач, все задачи из предыдущих разделов были именно такие. В реальном программировании, не учебном, такое разделение видов функций тоже полезно соблюдать, оно упрощает отладку программ, хотя, конечно, используется больше видов функций.

Помощь в создании тестов

Если вам нечего больше решать, но вы не хотите скучать и ждать следующие задачи, вы можете написать код на python для проверки чужих решений. Если в задаче нужно написать некоторую функцию, вы должны написать код, который запускает эту функцию на разных примерах и проверяет соответствие правильного ответа тому ответу, который выдала функция студента. Самое интересное при написании тестов — придумать побольше содержательных примеров для проверки. Эти примеры должны проверять все крайние случаи, чтобы не пропустить возможных ошибок. Для сравнения ответов пользуйтесь либо встроенным в python оператором assert, либо модулем pytest. Второй вариант предпочтительней.

Про задачи о файлах, прочитайте внимательно.

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

Когда в задаче написано, что дан файл, имеется в виду, что дано имя файла, т.е. в функцию с решением задачи надо передавать строку с именем, а не сам открытый файл.

Задачи

  1. Дан текстовый файл. Посчитать и вывести на экран такую информацию:
     количество строк: ...
     количество слов: ...
     средняя длина слова: ... (округлив до 2 знаков после запятой)
    

    Дальше в задачах предполагается, что вы будете читать слова в тестовых файлах. Под словом понимается последовательность непробельных символов, поэтому используйте функцию split для разделения текста на слова. Дополнительная обработка, в частности, убирание знаков препинания, не нужна.

  2. Здесь под словом понимается то же, что и в предыдущей задаче.
    1. Дан текстовый файл. Верните все слова файла в виде одного списка.
    2. Дан текстовый файл. Верните все слова файла в виде списка списков, где внутренние списки соответствуют строкам файла. Например, файл
       Если я чешу в затылке - 
       Не беда! 
       В голове моей опилки, 
      

    Должно получиться (форматирование построчно дано только для ясности, это всего-лишь списки):

     [
         ['Если', 'я', 'чешу', 'в', 'затылке', '-'],
         ['Не', 'беда!'],
         ['В', 'голове', 'моей', 'опилки,']
     ]
    
  3. Дан файл, его надо открыть как двоичный файл и найти самый частый байт. Т.е. число от 0 до 255, которое встречается чаще всего.

  4. Дан текстовый файл и еще один файл для вывода результата. Необходимо записать во второй файл содержимое первого файла, повторив каждый символ дважды.