Kodomo

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

Учебная страница курса биоинформатики,
год поступления 2015

Подсказки к заданию 8

Срез строки

>>> 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.