Учебная страница курса биоинформатики,
год поступления 2016
Подсказки к заданию 8
Python как калькулятор
Если набрать в командной строке слово python (без имени файла с программой) и нажать Enter, то интерпретатор питона запустится в интерактивном режиме, то есть будет выполнять введённые строки сразу после нажатия клавиши Enter. Чтобы выйти из этого режима, выполните команду quit() или нажмите Ctrl+D.
Преимущества у такого режима три:
- во-первых, python можно использовать как удобный калькулятор. При этом (в отличие от обычного калькулятора) промежуточные результаты можно "запоминать" в переменных и потом использовать столько раз, сколько надо.
- во-вторых, в таком режиме удобно проверять эффект встроенных функций, методов, операций и т.п.
- в третьих, имеется встроенный help. Например, выполнение команды:
help(sorted)
выдаёт краткую справку по функции sorted, а выполнение команды
help(str.split)
— по методу split, имеющемуся у объектов типа str.
Далее примеры приводятся как копии консоли интерактивного режима интерпретатора python. Если что-то непонятно, рекомендуется самому выполнить соответствующую операцию...
Срез строки
>>> s = "abcde" >>> s[0] 'a' >>> s[4] 'e' >>> s[5] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: string index out of range >>> s[1:3] 'bc' >>> s[2:] 'cde' >>>
Логика: сравнение чисел и строк
>>> a = 1 >>> a == 1 True >>> a == 2 False >>> a != 2 True >>> a > 2 False >>> a < 2 True >>>
Помните разницу между = и ==: принципиально разные вещи!
>>> s = "abcde" >>> s == "abc" False >>> "abcde" == s True >>>
Логические операторы
or, and, not — если смысл не до конца понятен, выводите примеры вида:
>>> (2 == 1) or (2 > 1)
пока не станет понятен.
Несколько полезных методов
Перевод в верхний/нижний регистр:
>>> s = "abcd" >>> s.upper() 'ABCD' >>> su = "AbCd" >>> su.lower() 'abcd'
Проверка наличия символа (подстроки) в строке:
>>> s = "abcde" >>> "e" in s True >>> "g" in s False >>> "bc" in s True >>> "ac" in s False >>>
Пустая строка является подстрокой любой строки:
>>> "" in "abcde" True >>>
Списки
>>> el = [1, 3, 5] >>> el[0] 1 >>> el[1] 3 >>> len(el) 3 >>> el[3] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range >>> el + ["abc"] [1, 3, 5, 'abc'] >>> 3 in el True >>> "3" in el False >>> el[1:] [3, 5] >>>
Обратите внимание, что можно (и часто нужно!) оперировать со списками из одного элемента:
>>> al = [6] >>> len(al) 1 >>>
и даже со списком из нуля элементов (пустым списком):
>>> newl = [] >>> len(newl) 0 >>> newl = newl + ["word"] >>> len(newl) 1 >>>
Выполнение операторов
indata = open("input.txt", "r") inlist = indata.readlines()
приведёт к тому, что в переменной inlist окажется список строк файла "input.txt"
Циклы
При выполнении следующей программы:
mm = [1, 2, 3, 4] for i in mm: j = i*i print i, j
будет напечатана таблица из чисел 1, 2, 3, 4 в первом столбце и их квадратов во втором столбце.
Следующая программа будет печатать ("раздетые") строки файла "ex.txt", пока не наткнётся на строку, в которой ничего нет, кроме пробелов и других байтов, удаляемых методом strip:
indata = open("ex.txt", "r") s = indata.readline() s = s.strip() while len(s) > 0: print s s = indata.readline() s = s.strip()
Это пример цикла не по списку, а "пока выполнено условие", в данном случае len(s) > 0.
Функция "range"
Функция range имеет аргумент — целое число и возвращает список целых чисел от 0 до числа, на 1 меньшего, чем аргумент:
>>> range(5) [0, 1, 2, 3, 4] >>>
Эта функция удобна для использования в цикле, если нужно выполнить какие-либо операции для чисел от 0 до заданного. Например для подсчёта числа сочетаний из n по 2 можно написать:
cn2 = 0 for i in range(n): cn2 = cn2 + i
Для подсчёта факториала можно написать так:
fact = 1 for i in range(1, n + 1): fact = fact*i
(а что возвращает выражение range(1, n + 1), выясните сами. Постарайтесь также понять, что возвращает выражение вида range(2, 10, 3).)
Условия
if a[0] == ">": print a
напечатает строку a, только если её первый символ есть ">".
Аргументы командной строки
Чтобы принимать данные из командной строки, нужно вставить в начало файла с программой строку
from sys import argv
При запуске программы в переменную argv записывается список, в который попадают аргументы командной строки, то есть те слова, которые введены в командную строку после имени файла с программой. При этом первый аргумент имеет индекс 1 (а индекс 0 имеет само имя файла с программой). Например, пусть файл example.py содержит следующие строки:
from sys import argv indata = open(argv[1], "r") print indata.readline() indata.close()
Если теперь запустить программу, указав в командной строке имя файла:
python example.py test.txt
то программа напечатает первую строку файла test.txt.