Учебная страница курса биоинформатики,
год поступления 2013
Дата посл. изменения 6 ноября 2013 ДД
1. Общее правило при написании любого скрипта длиннее 10 строк
Никогда не пытайтесь написать сразу полностью работающий скрипт! В 99,99% случаев он не будет работать, будет выдавать 100 глупых ошибок, а в попытках заставить его работать можно даже самые крепкие нервы истончить!
Пусть, например, Вы хотите написать скрипт, разбирающий сложный файл: не нужно сразу писать цикл на 30 строк! Начните с открытия файла и цикла, который проходит по строкам файла с заранее заданным именем (скажем, "1.txt") и выводит их на экран. Не забудьте закрыть файл. Попробуйте запустить эту программу из 4-5 строк и проверьте, действительно ли содержимое заданного файла выводится на экран. Любую ошибку (ввели имя без кавычек, попробовали закрыть файл через close(myfile), мало ли что) Вы в таком скрипте увидите сразу. Теперь хотите вы, чтобы скрипт обращал внимание только на строки, начинающиеся с символа >: добавьте в тело цикла условие if и выведите теперь на экран только строки, удовлетворяющие условию. Проверьте, правильно ли скрипт Вас понял! И т.д., и т.п.
Итак: не нужно писать код на N строк с надеждой "авось заработает" и без четкого плана, а потом пару часов биться с ним, чтобы его исправить. Программирование – это нелегкий труд, напряжение ума и оттачивание логики, последовательности в своих действиях, поэтому лучше написать 5 строчек, которые есть маленький шажок к намеченной цели, и обдумать, где у Вас "затык" (или попросить совета), нежели написать 500 строчек, которые не работают, и полагать, что у Вас нету "дара" программирования, коли с первого же раза не получилось.
2. "Все по существу написано правильно, а печатается не fasta-формат" - что делать?
Ошибка очень распространенная, пожалуйста, обратите внимание! Команда print не знает, что нужно выдать на экран значения переменных дабы вышел fasta-формат, поэтому вот такой код НЕ позволит получить нужный результат:
В разделе 4.3 подсказок рассказывается о том, как можно использовать команду print, в том числе с примером ее использования вместе с операцией подстановки (через %). Это поможет исправить досадную ошибку.
3. Использование print со скобками
В Python 2.7 print это НЕ ФУНКЦИЯ. Поэтому при вызове этой штуки писать круглые скобки не нужно, это приводит к ошибкам! Например, вот такой код приведет к тому, что напечатано будет не YP_001 и hypothetical через пробел, как Вы ожидаете, а то, что указано в комментарии:
Дело в том, что в этом случае создается кортеж (что-то вроде списка) из двух переменных, и Вы его выводите на печать! Чтобы добиться нужного результата, удалите скобки.
4. Задавайте классы (и функции) ВСЕГДА ДО кода самого скрипта
Это позволит избежать ошибочного использования переменных, которые определяются выше в скрипте. В примере ниже (ВНИМАНИЕ: ТАК ДЕЛАТЬ НЕЛЬЗЯ!) в строке 1 пользователь вводит имя, а потом задается класс. В его инициализирующей функции атрибуту класса с именем name присваивается значение из переменной input, которая была определена выше, и вроде бы даже все будет работать правильно. Но переменная input не входит в число аргументов функции __init__(), она в данном случае называется глобальной переменной.
Пожалуйста, запомните одну вещь, одно из "золотых правил" программирования:
Никогда не используйте глобальные переменные внутри функций и классов. Исключения для этого правила настолько редки, что Вы с ними не столкнетесь в учебном программировании. Еще раз: любая функция (в том числе - метод класса) может работать только с (а) своими аргументами и (б) созданными внутри себя переменными!
Почему так (одна из многих причин): по своей сути, заданный класс (как и заданная отдельная функция) – это элемент кода, который, начиная со строки def ... или class ... и включая все строчки, идущие с отступом, можно вырезать и перенести в любое место, например, в другой скрипт, и они там будут работать как ни в чем не бывало.