Это старая версия Информатика/Архив/2019/9Д/ПравилаНаписанияПрограмм за 11.10.2018 09:15 под редакцией IlyaRayko.
Просмотр кода страницы Правила Написания Программ страница
== Требования к программам ==
=== Преамбула ===
Сформулированные ниже правила базируются на следующих документах:
1. PEP20. Дзен Питона. Если Вы программируете как-то иначе, то скорее всего Вы программируете не на Python. ((https://www.python.org/dev/peps/pep-0020/ Оригинал)) и ((https://tyapk.ru/blog/post/the-zen-of-python перевод)).
1. Общешкольные правила оформления программ. Если угодно, корпоративная этика. Сравнивать можно с ((https://server.179.ru/wiki/?page=DMA_Fr_F_Bl_2d_N этими)) и ((https://server.179.ru/wiki/?page=d_WZ_Ck_F7_1g_84_6 этими))
1. PEP8.
Помимо сформулированных ниже правил, программы должны соответствовать документу ((http://www.python.org/dev/peps/pep-0008/ PEP8: Style Guide for Python Code)) из официальной документации языка Python. При сдаче задачи в ejudge проводится автоматическая проверка на соответствие программы PEP8.
==== Символы и отступы ====
Величина отступа – четыре пробела. Использование символа табуляции (символа, с кодом 9) запрещается.
Последняя строка должна завершаться символом конца строки. Пустых строк в конце файла быть не должно. В конце любой строки не должно быть пробелов.
Функции должны отделяться двумя пустыми строками. Отдельные смысловые блоки в программе должны отделяться пустыми строками.
==== Имена переменных ====
Имена переменных, функций, типов должны быть осмысленными и отражать назначение. Слишком длинные имена, однако, не рекомендуются. В именах допускаются сокращения, которые не затрудняют понимание имени и назначения функций и переменных.
Допускается использование односложных имен переменных для счетчиков (i, j, k), а также если это имя фигурирует в условии задачи (N, M, K, L).
В именах должны использоваться только английские слова. Транслитерации русских слов не допускаются. Запрещается использование символов, отличных от латинских букв, цифр и символа подчеркивания.
Если имя переменной или функции состоит из нескольких слов, то они должны разделяться символом подчеркивания или заглавными буквами. Например:
Calc****Sqrt – допустимо
calc_sqrt – божественно
calculate_square_root – допустимо, но нежелательно (слишком длинное имя)
vychislenie_kornya – недопустимо (используются русские имена)
f – недопустимо (непонятно назначение функции)
Обычно в качестве имён функций и переменных используются одно или несколько слов (или их сокращений) маленькими буквами с разделением символом подчёркивания.
Например, result, factorial, calc_factorial(n), calc_fact(n), iter, find_next_value(), apples_num и т.д. Для перевода слов можно использовать словари ((http://www.multitran.ru/ мультитран)) или ((http://slovari.yandex.ru/ словари Lingvo на яндексе))
Имена констант записываются полностью заглавными буквами. Если имя константы состоит из нескольких слов, для их разделения используются подчеркивания. Например, EPSILON, MAX_SIZE.
Имена массивов и названия типов структур должны записываться с заглавной буквы.
==== Арифметические операции ====
В одной строчке записывается одна арифметическая операция. Например:
%%(php)
a = b
b = c
%%
Бинарные операции разделяются пробелом. После запятой ставится пробел. Между именем функции и скобками пробел не ставится, с внутренней стороны скобок пробелы не ставятся
%%(php)
a = b + 2 * c
a = (b + 2) * c
print(a, b, sep = "")
%%
==== Использование констант ====
Не допускается использование чисел в программе, значение которых неочевидно. Например, запись while i < 179 или c = c + 32 недопустима.
==== Длина строки и переносы ====
Длина каждой строки не должна превышать 79 символов, а длина строки с комментарием — 72. Переносы длинных строк могут выглядеть так:
%%(php)
# 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)
%%
==== Отделение операторов пробелами ====
Пробелы не ставятся, если они примыкают к скобкам изнутри:
%%(php)
Yes: spam(ham[1], {eggs: 2})
No: spam( ham[ 1 ], { eggs: 2 } )
%%
Пробелы не ставятся перед знаками препинания:
%%(php)
Yes: if x == 4: print x, y; x, y = y, x
No: if x == 4 : print x , y ; x , y = y , x
%%
Пробелы не ставятся перед скобкой у функций или у списков:
%%(php)
Yes: spam(1)
No: spam (1)
Yes: dict['key'] = list[index]
No: dict ['key'] = list [index]
%%
Бинарные операции обычно отделяются одним пробелом слева и справа. Однако, если в выражении есть операции разного приоритета (например, сложение и умножение, или сложение и возведение в степень), то пробелы у операции с бОльшим приоритетом могут быть пропущены. В любом случае количество пробелов слева и справа от оператора должно быть одинаковым.
%%(php)
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)
%%