Школа179: Правила Написания Программ

https://server.179.ru/wiki     редакция: 20.08.2016 14:18:54
Информатика/Архив/2014/8Б1/ПравилаНаписанияПрограмм

Требования к программам

Python


Помимо сформулированных ниже правил, программы должны соответствовать документу PEP8: Style Guide for Python Code из официальной документации языка Python. При сдаче задачи в ejudge проводится автоматическая проверка на соответствие программы PEP8.

Символы и отступы


Величина отступа – четыре пробела. Использование символа табуляции (символа, с кодом 9) запрещается.

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

Функции должны отделяться двумя пустыми строками. Отдельные смысловые блоки в программе должны отделяться пустыми строками.

Имена переменных


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

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

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

Если имя переменной или функции состоит из нескольких слов, то они должны разделяться символом подчеркивания или заглавными буквами. Например:
CalcSqrt – допустимо
calc_sqrt – божественно
calculate_square_root – допустимо, но нежелательно (слишком длинное имя)
vychislenie_kornya – недопустимо (используются русские имена)
f – недопустимо (непонятно назначение функции)

Обычно в качестве имён функций и переменных используются одно или несколько слов (или их сокращений) маленькими буквами с разделением символом подчёркивания.
Например, result, factorial, calc_factorial(n), calc_fact(n), iter, find_next_value(), apples_num и т.д. Для перевода слов можно использовать словари мультитран или словари Lingvo на яндексе

Имена констант записываются полностью заглавными буквами. Если имя константы состоит из нескольких слов, для их разделения используются подчеркивания. Например, EPSILON, MAX_SIZE.


Имена массивов и названия типов структур должны записываться с заглавной буквы.

Арифметические операции


В одной строчке записывается одна арифметическая операция. Например:


a = b
b = c


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


a = b + 2 * c
a = (b + 2) * c
print(a, b, sep = "")


Использование констант


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

Длина строки и переносы


Длина каждой строки не должна превышать 79 символов, а длина строки с комментарием — 72. Переносы длинных строк могут выглядеть так:

# Aligned with opening delimiter
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

# More indentation included to distinguish this from the rest.
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)


Отделение операторов пробелами


Пробелы не ставятся, если они примыкают к скобкам изнутри:

Yes: spam(ham[1], {eggs: 2})
No:  spam( ham[ 1 ], { eggs: 2 } )


Пробелы не ставятся перед знаками препинания:

Yes: if x == 4: print x, y; x, y = y, x
No:  if x == 4 : print x , y ; x , y = y , x


Пробелы не ставятся перед скобкой у функций или у списков:

Yes: spam(1)
No:  spam (1)
Yes: dict['key'] = list[index]
No:  dict ['key'] = list [index]


Бинарные операции обычно отделяются одним пробелом слева и справа. Однако, если в выражении есть операции разного приоритета (например, сложение и умножение, или сложение и возведение в степень), то пробелы у операции с бОльшим приоритетом могут быть пропущены. В любом случае количество пробелов слева и справа от оператора должно быть одинаковым.

Yes: i = i + 1
Yes: submitted += 1
Yes: x = x*2 - 1
Yes: hypot2 = x*x + y*y
Yes: c = (a+b) * (a-b)

No:  i=i+1
No:  submitted +=1
No:  x = x * 2 - 1
No:  hypot2 = x * x + y * y
No:  c = (a + b) * (a - b)