Número máximo de violaciones de PEP8 en una sola línea

17

Su tarea es escribir un archivo que contenga una línea con muchas violaciones pep8 .

Las normas:

  • Utilizamos pep8 versión 1.5.7 y la configuración predeterminada.
  • No se permite llamar a pep8 con otras opciones de línea de comando o usar un archivo rc personalizado.
  • Longitud máxima de línea 120 caracteres. Puede violar E501, claro, pero la línea en la que se calcula su puntaje debe ser <= 120 caracteres.
  • Su módulo puede tener otras líneas antes o después, pero solo una línea contribuye a su puntaje.
  • Su archivo puede contener SyntaxErrors o cualquier tipo de basura, no es necesario importarlo ni ejecutarlo.

Ejemplo de puntuación:

El siguiente módulo thing.pytiene una puntuación de 2, porque contiene una línea (línea 1) con 2 violaciones pep8.

 spam='potato'

Para verificar un puntaje:

~$ 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
fuente
2
¿Es este un ... desafío específico del idioma? Porque realmente no nos gustan estos.
John Dvorak
Supongo que no es realmente un lenguaje específico (ya que el archivo puede contener cualquier basura) pero, obviamente, personas familiarizadas con el pitón de codificación tendrá alguna ventaja
Wim

Respuestas:

11

241

si quieres el mayor error, enloquece con punto y coma

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

$ cat test.py | wc -m
120

$ pep8 test.py | wc -l
241

La mayoría de los errores son:

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

con esos errores al final:

test.py:1:120: E703 statement ends with a semicolon
test.py:1:121: W292 no newline at end of file
freeforall tousez
fuente
@wim no pudo responder a tu publicación, así que solo la puse aquí. tenías razón sobre la ventaja, i ser sorpresa si alguien averiguar algo más que la causa más error, entonces lo que he publicado anteriormente
freeforall tousez
Creo que eres un punto y coma corto. wc cuenta la nueva línea final, pero no contamos eso para los recuentos de caracteres en este sitio. Como puede ver en su cita de código, su último personaje es el # 119. Debería obtener 240, 2 para cada punto y coma, excepto el último, 1 para la línea demasiado larga y 1 para terminar con un punto y coma.
isaacg
@isaacg ah, tienes razón, pensé que era extraño que obtuviera menos error que el número de caracteres * 2, culpo a gedit por agregar la nueva línea invisible: P
freeforall tousez
jaja, un poco barato ... pero efectivo! +1
wim
7

123

¡Sí, más violaciones que personajes!

$ 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

El truco es que un =after a (hace que pep piense que está haciendo una palabra clave en una llamada de función (por ejemplo foo(bar=12)). En este contexto, hacer [TAB]=desencadena tanto

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

Y hacer =[TAB]dispara ambos

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

Alegremente, puedes encadenarlos.

Esto da una cuenta de violación de uno por personaje. Necesito (configurarlo, pero no proporcionarnos los datos ):

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

Eso es 120. No hay nueva línea = 121. Se las arregló para activar el error "línea demasiado larga", por lo que es 122. Finalmente, usar un carácter para comenzar con un espacio (gracias eric_lagergren ) da 2 violaciones en lugar de 1:

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

¡Victoria!

Claudiu
fuente
Agregue un espacio en blanco inicial y elimine el último zy terminará con 103 ... pero cada vez que copio este código obtengo 83 en lugar de 102. Creo que el espacio se está desordenando.
Eric Lagergren
@eric_lagergren: estoy usando pestañas en lugar de espacios y supongo que no se están copiando correctamente. ¡Lo pegaré, supongo!
Claudiu