Максимальна кількість порушень 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

@isaacg ах, ви праві, я думав, що це дивно, що він отримав менше помилок, ніж кількість символів * 2, я звинувачую gedit за додавання невидимого нового рядка: 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

Хитрість полягає в тому, що =після того, як " (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.