#pragma css /css/2016.css <<BI>> = Подсказки к заданию 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) }}} {{{#!wiki noindent пока не станет понятен. }}} === Несколько полезных методов === Перевод в верхний/нижний регистр: {{{ >>> 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() }}} {{{#!wiki noindent приведёт к тому, что в переменной inlist окажется список строк файла "input.txt" }}} === Циклы === При выполнении следующей программы: {{{ mm = [1, 2, 3, 4] for i in mm: j = i*i print i, j }}} {{{#!wiki noindent будет напечатана таблица из чисел 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`.