Numero massimo di violazioni PEP8 in una sola riga


17

Il tuo compito è scrivere un file che contenga una riga con molte violazioni di pep8 .

Le regole:

  • Usiamo la versione 1.5.7 di pep8 e le impostazioni predefinite.
  • Non è consentito chiamare pep8 con altre opzioni della riga di comando o utilizzare un file rc personalizzato.
  • Lunghezza massima della riga 120 caratteri. Puoi violare E501, certo, ma la linea su cui viene calcolato il tuo punteggio deve essere <= 120 caratteri.
  • Il tuo modulo può avere altre righe prima o dopo, ma solo una riga contribuisce al tuo punteggio.
  • Il tuo file può contenere SyntaxErrors o qualsiasi tipo di immondizia, non è necessario importarlo o eseguirlo.

Esempio di punteggio:

Il modulo seguente thing.pyha un punteggio di 2, perché contiene una linea (linea 1) con 2 violazioni pep8.

 spam='potato'

Per controllare un punteggio:

~$ 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
È una sfida specifica per la lingua? Perché non ci piacciono davvero questi.
John Dvorak,

Immagino che non sia specifico per la lingua (perché il file può contenere qualsiasi immondizia) ma ovviamente le persone che hanno familiarità con la codifica Python avranno qualche vantaggio
wim

Risposte:


11

241

se vuoi il maggior numero di errori, impazzisci con il punto e virgola

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

$ cat test.py | wc -m
120

$ pep8 test.py | wc -l
241

la maggior parte dell'errore sono:

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

con questi errori alla fine:

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

@wim non ha potuto rispondere al tuo post, quindi l'ho messo qui. avevi ragione sul vantaggio, sono sorpreso se qualcuno
capisse

Penso che tu sia un punto e virgola. wc conta la nuova riga finale, ma non la contiamo per il conteggio dei personaggi su questo sito. Come puoi vedere nella citazione del codice, il tuo ultimo carattere è # 119. Dovresti ottenere 240, 2 per ogni punto e virgola tranne l'ultimo, 1 per la riga troppo lunga e 1 per terminare con un punto e virgola.
Isaacg,

@isaacg ah, hai ragione, ho pensato che fosse strano che avesse ottenuto meno errori del numero di caratteri * 2, biasimo Gedit per aver aggiunto l'invisibile newline: P
freeforall tousez

haha, un po 'economico .. ma efficace! +1
mer

7

123

Sì, più violazioni che personaggi!

$ 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

Il trucco è che un =after a (fa pensare che stai facendo una parola chiave in una chiamata di funzione (ad es foo(bar=12).). In questo contesto, fare [TAB]=innesca entrambi

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

E fare =[TAB]innesca entrambi

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

Allegramente, puoi semplicemente incatenarli.

Questo dà un conteggio delle violazioni di uno per personaggio. Ho bisogno (di configurarlo, ma non fornendo )ci dà:

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

È 120. No newline = 121. È riuscito a innescare l'errore "line too long", quindi 122. Infine, usare un carattere per iniziare con uno spazio (grazie eric_lagergren ) genera 2 violazioni anziché 1:

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

Vittoria!


Aggiungi uno spazio bianco iniziale e rimuovi l'ultimo ze finirai con 103 ... ma ogni volta che copio questo codice ottengo 83 invece di 102. Penso che la spaziatura venga incasinata.
Eric Lagergren,

@eric_lagergren: sto usando le schede anziché gli spazi e immagino che non stiano copiando correttamente. Lo incollerò, immagino!
Claudiu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.