Kodomo

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

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

Типичные ошибки при выполнении ДЗ по программированию

Не успеваете - пишите письмо преподавателям

и получайте отсрочку. И вообще если что-то не так, пишите письмо, без сомнения. Лучше письмо сегодня, чем задолжность завтра.

Программа не запускается

Исправляйте.

Порядок имеет значение

Если по условию задачи программа принимает или выдаёт не одно, а несколько значений, выдавайте их в том же порядке, в котором они упоминаются в условии (если в условии явно не прописано, что порядок значения не имеет), иначе система проверки может не принять решение.

Внимательно читайте задания и делайте то, что просят

Если просят число цифр в числе, а вы печатаете само число, то задача не засчитывается.

Если просят файл Pupkine_pr8_number-length.py, а вы сдаете файл Pupkine_pr8_number_length.py, то задача не засчитывается, без сомнения.

Пишите грамотно

Проверяйте написание английских (и русских) слов, в которых сомневаетесь. К примеру, в следующей фразе как минимум 3 опечатки/ошибки: "What the last nucleotid nomber is? Protein lenght is 100".

Программа должна задавать вопрос пользователю

при помощи raw_input, чтобы было ясно, что в данный момент вводится.

Например, "CDS: Enter 1st bp number". (CDS - стандартное сокращение coding sequence, кодирующая последовательность; bp - base pair, пара нуклеотидов).

Когда в задании говорят "печатает", имеется в виду вывод на стандартный выходной поток (например, при помощи print), а не вывод на принтер :)

Программа должна указать, что именно она печатает

Например, protein length is 99 aa (aa - стандартное сокращение amino acids).

Программа не должна в конце зависать

Не нужно писать в конце скрипта raw_input() и т.п. Результат смотрят при помощи Ctrl+O, а не любуются им до нажатия кнопки Enter.

Не надо при каждом действии приводить тип

Рассмотрим работающее решение задачи про нейтрализацию:

   1 a = float(input("Enter the quantity of HCl(mole): "))
   2 b = float(input("Enter the quantity of KOH(mole): "))
   3 reacted = min(a, b)
   4 kcl = str(reacted)
   5 hcl = str(a - float(reacted))
   6 koh = str(b - float(reacted))
   7 print(hcl +  ". HCl"+ " ;" +  koh + ". KOH" + " ;" + kcl + ". KCl")

Всё в порядке, но на строках 5 и 6 зачем-то приводят reacted к типу float. reacted здесь и так float (результат min, применённого к двум float). Напрашивается догадка, что автор кода ошибочно считает, что reacted на 4-ой строке тоже становится строкой. Если это так, то стоило вместо "перестраховочного" приведения типов взять и проверить. Запомните: программирование наугад и добавление лишнего кода "чтобы не сглазить" - плохие практики!

Пути к файлам

Никаких русский букв и пробелов в именах файлов, иначе результаты будем сообщать по-китайски :)

Всем заданиям присвоены мнемоники, указанные после названий. Мнемоники заданий подчеркнуты. Решение кладите в файл ~/term1/block3/credits/ВашаФамилия_практикум_мнемоника.py где ~ - ваша домашняя папка (не путать с папкой public_html!), ВашаФамилия - ваша фамилия латинскими буквами с большой буквы, а мнемоника - мнемоника, указанная в задании.

Регистр букв в имени файла, как в задании. Не ошибайтесь с именем файла, иначе мы не увидим решение!

Мы проверяем выполнение программ при помощи Python 2

print("Hello, ",name,"!", sep="")

a=input()

Нет, нам не трудно установить Python 3, более того, он установлен, но есть несколько причин проверять решения только питоном 2:

Оформление кода

Следование нижеприведенным правилам не является обязательным для получения зачёта за задание, но крайне желательно (такое решение получает дополнительные баллы).

Проверка оформления кода происходит с оглядкой на стандарт оформления кода PEP8. Советую ознакомиться, чтобы писать код, который приятно читать.

Нарекания к коду по части стандарта записываются в протокол проверки решения по-английски.

Код выглядит более опретным, если рядом с знаками =, +, - и проч. стоят пробелы. После имён функций пробелы наоборот ставить не нужно. Пробелы ставят после запятых, но не до запятых и двоеточий. В конце строки кода пробелов быть не должно. (Например, a=min( 100 , 1000) нужно заменить на a = min(100, 1000))

Бинарные операции разделяются пробелом. После запятой ставится пробел. Между именем функции и скобками пробел не ставится, с внутренней стороны скобок пробелы не ставятся.

Не нужно приводить к типу переменную, которая и так в этом типе. (Например, int(2 ** 10) нужно заменить просто 2 ** 10)

Величина отступа – четыре пробела.

Имена переменных, функций, типов должны быть осмысленными и отражать назначение. Слишком длинные имена, однако, не рекомендуются. В именах допускаются сокращения, которые не затрудняют понимание имени и назначения функций и переменных.

Допускается использование односложных имен переменных для счетчиков (i, j, k), а также если это имя фигурирует в условии задачи (N, M, K, L).

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

Не допускается использование чисел в программе, значение которых неочевидно. Например, запись while i < 179 или c = c + 32 недопустима.