Максимальное количество нарушений PEP8 в одной строке


17

Ваша задача - написать файл, содержащий строку со многими нарушениями pep8 .

Правила:

  • Мы используем pep8 версии 1.5.7 и настройки по умолчанию.
  • Вызов pep8 с другими параметрами командной строки или использование пользовательского файла RC не допускается.
  • Максимальная длина строки 120 символов. Конечно, вы можете нарушить E501, но строка, по которой рассчитывается ваш счет, должна быть <= 120 символов.
  • Ваш модуль может иметь другие строки до или после, но только одна строка влияет на ваш счет.
  • Ваш файл может содержать SyntaxErrors или любой другой мусор, его не нужно импортировать или запускать.

Пример оценки:

Следующий модуль thing.pyимеет оценку 2, поскольку содержит строку (строка 1) с 2 нарушениями pep8.

 spam='potato'

Чтобы проверить счет:

~$ mktmpenv 
(tmp-ae3045bd2f629a8c)~/.virtualenvs/tmp-ae3045bd2f629a8c$ pip install pep8==1.5.7
(tmp-ae3045bd2f629a8c)~/.virtualenvs/tmp-ae3045bd2f629a8c$ echo -n "spam='potato'" > thing.py
(tmp-ae3045bd2f629a8c)~/.virtualenvs/tmp-ae3045bd2f629a8c$ pep8 thing.py 
thing.py:1:5: E225 missing whitespace around operator
thing.py:1:14: W292 no newline at end of file

2
Это ... конкретная языковая проблема? Потому что нам это не очень нравится.
Джон Дворак

Я предполагаю, что это не совсем зависит от языка (потому что файл может содержать какой-либо мусор), но очевидно, что люди, знакомые с программированием на python, получат некоторое преимущество
wim

Ответы:


11

241

если вы хотите больше всего ошибок, просто сходите с ума от точки с запятой

$ cat test.py
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

$ cat test.py | wc -m
120

$ pep8 test.py | wc -l
241

большая часть ошибки:

test.py:1:119: E231 missing whitespace after ';'
test.py:1:119: E702 multiple statements on one line (semicolon)

с этими ошибками в конце:

test.py:1:120: E703 statement ends with a semicolon
test.py:1:121: W292 no newline at end of file

@wim не смог ответить на ваше сообщение, поэтому я просто разместил его здесь. Вы были правы насчет преимущества, я удивлюсь, если кто-то
поймет

Я думаю, что вы короткая точка с запятой. wc считает последнюю строку, но мы не учитываем количество символов на этом сайте. Как вы можете видеть в своем коде цитаты, ваш последний символ # 119. Вы должны получить 240, 2 за каждую точку с запятой, кроме последней, 1 за слишком длинную строку и 1 за точку с запятой.
Исаак

@isaacg ах, вы правы, я подумал, что это странно, что он получил меньше ошибок, чем число символов * 2, я виню Гедита за добавление невидимой новой строки: P
freeforall tousez

хаха, вроде дешево .. но эффективно! +1
Вим

7

123

Да, больше нарушений, чем персонажей!

$ curl -s http://pastebin.com/raw.php?i=RwLJfa0Q | cat
 (  =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
$ curl -s http://pastebin.com/raw.php?i=RwLJfa0Q | wc -m
 120
$ curl -s http://pastebin.com/raw.php?i=RwLJfa0Q | pep8 - | wc -l
 123

Хитрость в том, что =после того, как a (pep думает, что вы делаете ключевое слово в вызове функции (например foo(bar=12)). В этом контексте выполнение [TAB]=запускает оба

killpep.py:1:3: E223 tab before operator
killpep.py:1:3: E251 unexpected spaces around keyword / parameter equals

И делает =[TAB]триггеры как

killpep.py:1:5: E224 tab after operator
killpep.py:1:5: E251 unexpected spaces around keyword / parameter equals

Достаточно радостно, вы можете просто связать их.

Это дает количество нарушений, равное одному на каждого персонажа. Мне нужно (настроить это, но не предоставляя )нам дает:

killpep.py:2:1: E901 TokenError: EOF in multi-line statement

Это 120. Нет новой строки = 121. Ему удалось вызвать ошибку «слишком длинная строка», так что это 122. Наконец, использование одного символа для начала с пробела (спасибо eric_lagergren ) дает 2 нарушения вместо 1:

killpep.py:1:2: E111 indentation is not a multiple of four
killpep.py:1:2: E113 unexpected indentation

Победа!


Добавьте начальный пробел и удалите последний, zи в итоге вы получите 103 ... но всякий раз, когда я копирую этот код, я получаю 83 вместо 102. Я думаю, что интервал запутывается.
Эрик Лагергрен

@eric_lagergren: я использую вкладки вместо пробелов и думаю, что они не копируются должным образом. Буду вставлять это я думаю!
Клавдиу
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.