Kodomo

Пользователь

Занятие 1.

Краткое содержание: Вводные слова. Питон как калькулятор (числа, строки, списки). Поиск документации по языку (dir, help, pydoc, сайты). Простейшая работа с файлами.


План рассказа

Обязательно научиться

Задания

Все задания выполняются в интерактивном режиме интерпретатора.

Для результатов задания создайте директорию Python в вашей домашней директории. (В windows: H:\Python, в linux:  mkdir ~/Python; cd ~/Python ). В качестве результата задания принимается файл practice1.log в директории результатов. В файл нужно записать те части вашего диалога с интерпретатором, которые приводят к получению результата задания. Например, если бы задание номер 0 было "напечатайте результат умножения 2 на 2", в файл должен был бы попасть такой фрагмент:

>>> print 2*2
4

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

Почти все задания в первую очередь нацелены на умение поиска документации. Резонно предположить, что, хотя я что-то и рассказал на вступительной части, в общем, вы имеете очень смутное представление о тех типах, с которыми вам нужно работать. Поэтому лучше начать с использования документации на сайте (см. выше).

  1. Сколько зёрен риса попросил за своё изобретение автор шахмат?
    • Легенда гласит, что после того, как изобретатель шахмат преподнёс своё изобретение шаху и шаху оно понравилось, шах предложил изобретателю попросить любую награду. Автор игры скромно попросил положить на первую клетку шахматной доски 1 зерно, на вторую 2, и на каждую следующую класть вдвое больше зёрен, чем на предыдущую.
    • Математическая часть задания (к программированию отношения не имеет): упростить записть соответсвтующей суммы.
    • Программистская часть задания: научиться возводить числа в степень (а также вообще посмотреть, чего интересного пишут про числа в документации)
  2. Нарисуйте на экране прямоугольник в ASCII-art в 40 символов в ширину. Подберите высоту рамки на ваш вкус. (Из символов -, | для рамок и + в уголках).
    • Подсказка:
      • а) Научитесь делать длинные строки из одинаковых символов
      • б) сохраните во вспомогательную переменную строку из нужного количества "-" между двумя "+"
      • в) сохраните в другюу вспомогательную переменную строку из нужного количества пробелов между двумя "|"
      • г) нарисуйте рамку из этих строк
  3. Нарисуйте в таком же в прямоугольнике число зёрен риса изобретателя шахмат (см. str.ljust, str.rjust, str.center)
    • Если вы выполняли предыдущее упражнение по подсказке, то вам достаточно немного переписать вторую вспомогательную переменную.
  4. Напишите число зёрен риса изобретателя шахмат в более удобочитаемом виде (расставьте пробелы между каждыми тремя символами начиная с конца).
    • Подсказка:
      • а) сохраните в переменную строковое представление числа (как сделать из числа строку?)
      • б) научитесь выводить на экран последние 3 символа строки; 3 символа перед ними, ...
      • в) выпишите (существующие) интервалы строки по три символа через пробел
    • Это задание подразумевает довольно много унылого повторения кода и предположение, что число в длину не больше 20 символов. Вопреки ожиданиям многих, форматирование через % не даёт готового решения в этом случае.
  5. Сохраните интервалы, которые вы выписывали через пробел для предыдущего задания в список. Прочитайте документацию по str.join. Сохраните в переменной строковое представление числа зёрен риса изобретателя шахмат через пробелы, как в предыдущем задании.
  6. Верните всё обратно (превратите строку с читаемым представлением числа зёрен риса изобретателя шахмат в число):
    • а) разбейте строку по пробелам
    • б) соедините получившиеся куски
    • в) превратите в число, распечатайте это число; совпадает ли оно с исходным числом?
    • Можно ли сделать пункты а и б проще?
  7. Откройте файл /etc/passwd (в Windows: P:/SpecialCourses/Python/passwd). В этом файле хранится информация о пользовательских аккаунтах в системе (в данном случае, не о всех). На каждый пользовательский аккаунт в файле отведено по строке, состоящей из семи записей, разделённых двоеточием: логин, буква x1, числовой идентификатор пользователя, числовой идентификатор группы, имя пользователя, домашняя директория, шелл. Выведите на экран по значение поля "имя пользователя" (5-е поле) для первой и последней записи файла. Посортируйте строки, полученные из файла и снова выведите на экран первое и последнее имя. По шагам:

    • а) откройте файл, прочитайте, разбейте по строкам, сохраните в переменную
    • б) разбейте по символу ":" первую строку, выведите пятый элемент полученного списка
    • в) аналогично для последней строки
    • г) отсортируйте список строк
    • д) повторите б и в
    • Обратите внимание на то, что в файле на самом деле нет пустых строк, но есть пустые имена пользователей.
    • Подсказка: В традиции unix принято завершать файл символом переноса строки. Это должно создать для вас определённые трудности.
  8. (*) Выведите название 3-й последовательности из файла /home/export/samba/public/SpecialCourses/Python/file.fasta (в Windows: P:/SpecialCourses/Python/file.fasta). Сохраните эту последовательность в формате fasta в файл file.fasta в директории результатов задания.
  9. (**) Следующая строка зашифрована кодом Цезаря с параметром 13. Расшифруйте её: Ybbxf yvxr lbh unir fhpprffshyyl qrpbqrq guvf fragrapr. Pbatenghyngvbaf urer. V whfg jbaqre vs lbh znantrq gb ybbx hc qbpf sbe rapbqr zrgubq bs fge.

    • Если вы не знаете, каким кодом шифровал Гай Юлий Цезарь свои секретные тексты, поищите в интернете.
    • Подсказка: это задание можно выполнить вызовом одного метода. Но есть и более сложный путь, который начинается так:

         1 >>> import string
         2 >>> help(string.maketrans)
      
  1. "раньше там хранился пароль в зашифрованном виде -- а на самой-самой заре времён и в незашифрованном, -- теперь осталась только одна буква от фразы: хрен взломаешь" (1)