Maksymalna liczba naruszeń PEP8 w jednym wierszu

17

Twoim zadaniem jest napisanie pliku zawierającego linię z wieloma naruszeniami pep8 .

Zasady:

  • Używamy pep8 w wersji 1.5.7 i ustawień domyślnych.
  • Wywoływanie pep8 z innymi opcjami wiersza poleceń lub używanie niestandardowego pliku rc jest niedozwolone.
  • Maksymalna długość linii 120 znaków. Oczywiście możesz naruszyć E501, ale linia, na której obliczany jest twój wynik, musi mieć <= 120 znaków.
  • Twój moduł może mieć inne linie przed lub po, ale tylko jedna linia ma wpływ na twój wynik.
  • Twój plik może zawierać błędy składniowe lub dowolne śmieci, nie trzeba go importować ani uruchamiać.

Przykład punktacji:

Poniższy moduł thing.pyma wynik 2, ponieważ zawiera linię (linię 1) z 2 naruszeniami pep8.

 spam='potato'

Aby sprawdzić wynik:

~$ 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
wim
źródło
2
Czy to ... wyzwanie specyficzne dla języka? Ponieważ tak naprawdę ich nie lubimy.
John Dvorak
Wydaje mi się, że nie jest tak naprawdę specyficzny dla języka (ponieważ plik może zawierać śmieci), ale oczywiście ludzie znający kodowanie w Pythonie będą mieli pewną przewagę
wim

Odpowiedzi:

11

241

jeśli chcesz jak najwięcej błędów, po prostu zwariuj z średnikiem

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

$ cat test.py | wc -m
120

$ pep8 test.py | wc -l
241

większość błędów to:

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

z tymi błędami na końcu:

test.py:1:120: E703 statement ends with a semicolon
test.py:1:121: W292 no newline at end of file
freeforall tousez
źródło
@ wim nie mógł odpowiedzieć na twój post, więc po prostu go tutaj umieściłem. miałeś rację co do korzyści, będę zaskoczony, jeśli ktoś wymyśli coś innego, co powoduje więcej błędów, niż to, co
napisałem
Myślę, że masz średnik krótki. wc liczy końcowy znak nowej linii, ale nie liczymy tego dla liczby znaków na tej stronie. Jak widać w cytacie z kodu, twój ostatni znak to # 119. Powinieneś dostać 240, 2 za każdy średnik z wyjątkiem ostatniego, 1 za zbyt długą linię i 1 za zakończenie średnika.
isaacg
@isaacg ah, masz rację, myślałem, że to dziwne, że dostał mniej błędów niż liczba znaków * 2, obwiniam gedit za dodanie niewidzialnej nowej linii: P
freeforall tousez
haha, trochę tanie .. ale skuteczne! +1
wim
7

123

Tak, więcej naruszeń niż postaci!

$ 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

Sztuczka polega na tym, że =po (myśli Pep myślisz, że robisz słowo kluczowe w wywołaniu funkcji (np foo(bar=12).). W tym kontekście wykonanie [TAB]=wyzwala oba

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

I =[TAB]wyzwalanie obu

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

Na szczęście możesz je po prostu połączyć.

Daje to liczbę naruszeń wynoszącą jeden na postać. Muszę (to skonfigurować, ale brak podania )daje nam:

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

To 120. Brak nowej linii = 121. Udało się wyzwolić błąd „zbyt długiej linii”, więc to 122. Wreszcie, użycie jednego znaku do rozpoczęcia spacją (dzięki eric_lagergren ) daje 2 naruszenia zamiast 1:

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

Zwycięstwo!

Claudiu
źródło
Dodaj wiodące białe znaki i usuń ostatnią, za skończysz na 103 ... ale za każdym razem, gdy kopiuję ten kod, dostaję 83 zamiast 102. Myślę, że odstępy są pomieszane.
Eric Lagergren,
@eric_lagergren: Używam tabulatorów zamiast spacji i myślę, że nie kopiują się poprawnie. Wkleję to, jak sądzę!
Claudiu